Adh*_*ali 5 python arrays performance numpy
我试图连接几百个数组大小总计近25GB的数据.我在56 GB机器上测试,但是我收到了内存错误.我认为我做的方式是无效的,吸引了大量的记忆.这是我的代码:
for dirname, dirnames, filenames in os.walk('/home/extra/AllData'):
filenames.sort()
BigArray=numpy.zeros((1,200))
for file in filenames:
newArray[load(filenames[filea])
BigArray=numpy.concatenate((BigArrat,newArray))
Run Code Online (Sandbox Code Playgroud)
任何想法,想法或解决方案?
谢谢
你的流程效率极低。在处理如此大量的数据时,您确实需要了解您的工具。
对于你的问题,np.concatenate是被禁止的 - 它至少需要输入内存的两倍。另外,它会复制所有数据,因此速度也很慢。
使用numpy.memmap加载数组。这将仅使用几个字节的内存,同时仍然非常高效。
使用 加入他们np.vstack。仅调用一次(即不要调用 bigArray=vstack(bigArray,newArray)!!!)。加载列表中的所有数组allArrays,然后调用bigArray = vstack(allArrays)
如果这确实太慢,您需要提前知道数组的大小,创建一次该大小的数组,然后将数据加载到现有数组中(而不是每次都创建一个新数组)。
根据磁盘上文件更改的频率,将它们与操作系统工具连接起来创建一个大文件然后加载该文件可能会更有效(或使用numpy.memmap)