5

我试图连接数百个数组大小,总计近 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))

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

谢谢

4

1 回答 1

3

你的过程非常低效。在处理如此大量的数据时,您确实需要了解您的工具。

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

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

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

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

    根据磁盘上文件更改的频率,将它们与操作系统工具连接起来以创建一个大文件然后加载它(或使用numpy.memmap)可能会更有效

于 2013-10-31T11:39:25.760 回答