我试图连接几百个数组,总共有近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))
任何想法,想法或解决方案?
由于
答案 0 :(得分:2)
您的流程可能效率低下。处理如此大量的数据时,您确实需要了解自己的工具。
对于您的问题,np.concatenate
被禁止 - 它至少需要输入内存的两倍。此外,它会复制每一位数据,所以它也很慢。
使用numpy.memmap加载数组。这将只使用几个字节的内存,同时仍然非常有效。
使用np.vstack
加入他们。只打电话一次(即不 bigArray=vstack(bigArray,newArray)
!!!)。将所有数组加载到列表allArrays
中,然后调用bigArray = vstack(allArrays)
如果真的太慢,你需要提前知道数组的大小,创建一个这个大小的数组,然后将数据加载到现有数组中(而不是每次都创建一个新数组) )。
根据磁盘上文件的更改频率,将它们与OS工具连接起来创建一个巨大的文件,然后加载它(或使用numpy.memmap)