我有一个大的结构化二进制文件(2.1GB),每个数据包中有一段标头和所需数据,正在将其读入易失性存储器以加快访问速度。为此,我目前正在使用带有自定义数据类型的 numpy 的 memmap 工具来检索所需的数据集,使用下面显示的 cython 过程,
#Code for illustration only
data1 = np.memmap(file_name, dtype = dt, mode = 'c')
data2 = np.memmap(file_name1, dtype = dt, mode = 'c')
cdef np.ndarray lin1 = np.zeros((len(data1)), dtype = np.int32)
cdef np.ndarray lin2 = np.zeros((len(data2)), dtype = np.int32)
cdef int i
for i in range(len(data1)):
lin1[i] = data1['Packet'][i]
lin2[i] = data2['Packet'][i]
现在,理想情况下,我希望在此 IO 操作上花费尽可能少的时间,因为数据集的进一步处理在计算上非常大,并且有多个可用的此类文件集需要类似的处理。此 IO 操作占用了将近 40% 的代码执行时间。如果数据存在于同一磁盘的不同分区上,则该值会更高。
有没有更有效或更省时的方法来做到这一点?