【问题标题】:memory efficient way to stack array in python在python中堆叠数组的内存有效方法
【发布时间】:2017-06-13 08:32:10
【问题描述】:

有很大的数组,我想读取它们并堆叠它们,比如:

>>> x=npy.arange(10).reshape(5,2)
>>> y=npy.arange(10,20).reshape(5,2)
>>> npy.append(x,y)
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19])

>>> z.reshape(2,x.shape[0],x.shape[1])
array([[[ 0,  1],
        [ 2,  3],
        [ 4,  5],
        [ 6,  7],
        [ 8,  9]],

       [[10, 11],
        [12, 13],
        [14, 15],
        [16, 17],
        [18, 19]]])

但结果会越来越大,最后程序因内存不足而停止。 代码是:

for i in range(1, days+1):
    with rasterio.open(directory+"B04_"+str(i)+".jp2") as dataset:
        band_4=dataset.read()[0]

    with rasterio.open(directory+"B08_"+str(i)+".jp2") as dataset:
        band_8=dataset.read()[0]

    _=(band_8- band_4) / (band_8+ band_4+0.0000001)
    ndvi=npy.append(ndvi, ـ )

ndvi=ndvi.reshape(days ,band_8.shape[0],band_8.shape[1])

读取和追加数组最节省内存的方法是什么?

【问题讨论】:

  • 有多少个数组,大小是多少?
  • y=npy.arange(20).reshape(5,2) 来自您的示例会引发错误。
  • 像这样使用npy.append 并不理想,在速度方面,但不应该影响空间使用。迟早,当您添加更多文件时,您会遇到内存错误。在某些时候,生成的数组将比您的 RAM 可以容纳的更大。最近还有其他关于连接数组的 SO 问题。
  • @saintsfan342000 完成。
  • @hpaulj ndvi 大小通过 32gb

标签: python numpy out-of-memory memory-efficient


【解决方案1】:

试试 Dask (http://dask.pydata.org/) 应该可以解决您的问题。如果数据太大而无法放入内存,此库允许将部分数据放在磁盘上。

【讨论】:

  • 这个答案似乎更适合作为评论
  • 测试一下,但对我没有帮助。
猜你喜欢
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多