我试图连接数百个数组大小,总共将近 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))
任何想法、想法或解决方案?
谢谢
最佳答案
您的流程极度效率低下。在处理如此大量的数据时,您确实需要了解您的工具。
对于您的问题,np.concatenate
是被禁止的——它至少需要输入内存的两倍。此外,它会复制所有数据,因此速度也很慢。
使用 numpy.memmap加载数组。这将仅使用几个字节的内存,同时仍然非常高效。
使用
np.vstack
加入他们。只调用一次(即不要bigArray=vstack(bigArray,newArray)
!!!)。加载列表allArrays
中的所有数组,然后调用bigArray = vstack(allArrays)
如果那样真的太慢,你需要提前知道数组的大小,创建一次这个大小的数组,然后将数据加载到现有数组中(而不是每次都创建一个新的数组) ).
根据磁盘上文件更改的频率,将它们与操作系统工具连接起来创建一个大文件然后加载它(或使用 numpy.memmap )可能会更有效
关于python - 高效的数组连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19699127/