Python 2.7 有效地管理内存和python处理

Python 2.7 有效地管理内存和python处理,python-2.7,numpy,Python 2.7,Numpy,我需要读取一个2.5gb大的文件。我使用以下syntx: 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.reshap

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

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给了我“已达到最大内存”错误


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

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

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

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

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

同样,删除不必要的
np.zeros()

您不需要首先创建零数组,您可以删除
np.zeros()
行。从文件读取数据速度较慢,请分析您的代码以确定
np.fromfile()
的时间开销。读取1.25GB数据大约需要18秒!再过12-14秒就可以重塑!
mat_new = mat1.transpose(0,2,3,1) # no data copying