python - 高效的数组连接

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

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

谢谢

最佳答案

您的流程极度效率低下。在处理如此大量的数据时,您确实需要了解您的工具。

对于您的问题,np.concatenate 是被禁止的——它至少需要输入内存的两倍。此外,它会复制所有数据,因此速度也很慢。

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

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

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

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

关于python - 高效的数组连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19699127/

相关文章:

python - Python 中的快速字符串到整数转换

c - 访问数组中的项目与指针引用的性能差异?

python - Tensorflow 中的 Triplet、Siamese 和 Softmax

javascript - 如何在Dart中实现Node.js类似功能的缓冲区

PHP/MySQL 插入不同的数组值

php - 将 "Defaults"数组与 "Input"数组合并? PHP 哪个函数?

c++ - 我是否应该期望GMP的mpf_class比原始数据类型double慢得多?

python - 如何使用cron调度运行python程序

python - 如何处理错误的值不足以解开for循环

python - flake8 和 "old style class declaration"