2

我需要读取一个 2.5gb 大的文件。我使用以下语法:

import numpy as np
limit=4269*352*288*3
mat1=np.zeros(limit, dtype='uint8')
mat1=np.fromfile("path/to/file", "uint8", limit)

我现在需要重塑这个数组:

mat_new=np.zeros([4269, 288, 352, 3], dtype='uint8')
mat_new=np.transpose(np.reshape(mat1,[4269,3,288,352]), [0,2,3,1])

这在我的 4gb ram i7 第二代系统上大约需要 35 秒。任何方式我都可以让它更快。因为这只是我的计划的开始,还有更复杂的事情要发生。以后我不需要mat1了!

此外,由于 Python 给了我“达到最大内存”错误,所以我只读取了一半的文件。

4

1 回答 1

1

读取1.25GB数据大约需要18秒

它大约是 70MB/s,即速度可能受到磁盘 I/O 性能的限制。

如果您不需要整个文件;你可以使用numpy.memmap

mat = np.memmap("path/to/file", shape=(4269,288,352,3))

为避免内存错误,请使用就地操作,例如:

mat_new = mat1.transpose(0,2,3,1) # no data copying

同样正如@HYRY 所说,删除不必要np.zeros()的 .

于 2013-04-17T08:05:38.460 回答