高效的数组连接

时间:2013-10-31 05:35:03

标签: 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))

任何想法,想法或解决方案?

由于

1 个答案:

答案 0 :(得分:2)

您的流程可能效率低下。处理如此大量的数据时,您确实需要了解自己的工具。

对于您的问题,np.concatenate被禁止 - 它至少需要输入内存的两倍。此外,它会复制每一位数据,所以它也很慢。

  1. 使用numpy.memmap加载数组。这将只使用几个字节的内存,同时仍然非常有效。

    使用np.vstack加入他们。只打电话一次(即 bigArray=vstack(bigArray,newArray) !!!)。将所有数组加载到列表allArrays中,然后调用bigArray = vstack(allArrays)

  2. 如果真的太慢,你需要提前知道数组的大小,创建一个这个大小的数组,然后将数据加载到现有数组中(而不是每次都创建一个新数组) )。

    根据磁盘上文件的更改频率,将它们与OS工具连接起来创建一个巨大的文件,然后加载它(或使用numpy.memmap