我是一名有用的助手,可以为您翻译文本。
我有一个处理脚本,旨在拉取类型为“uint16”的二进制数据文件,并以每次6400个块进行各种处理。该代码最初是使用Matlab编写的,但由于分析代码是用Python编写的,我们希望通过在Python中完成所有操作来简化流程。问题是我注意到我的Python代码比Matlab的fread函数慢得足够多。
简单来说,Matlab代码如下:
fid = fopen(filename);
frame = reshape(fread(fid,80*80,'uint16'),80,80);
我的Python代码非常简单:
with open(filename, 'rb') as f:
frame = np.array(unpack("H"*6400, f.read(12800))).reshape(80, 80).astype('float64')
文件大小从500 MB -> 400 GB差异很大,因此我相信在Python中找到更快的解析数据的方法可能会在较大的文件上产生回报。一个500 MB的文件通常有~50000个块(chunk),而这个数字随着文件大小呈线性增长。我看到的速度差异大约是:
Python = 4 x 10^-4 seconds / chunk
Matlab = 6.5 x 10^-5 seconds / chunk
处理时间表明,Matlab比我实现的Python方法快约5倍。我已经尝试了诸如numpy.fromfile和numpy.memmap等方法,但由于这些方法在某些时候需要将整个文件打开到内存中,因此限制了使用情况,因为我的二进制文件相当大。是否有一种Pythonic的方法可以做到这一点,而我却错过了呢?我原本认为Python在打开和读取二进制文件方面非常快。非常感谢您的任何建议。
fromfile
函数有计数或大小参数吗? - hpaulj