我试图在双时态RapidEye多光谱图像上运行mortconty的http://mcanty.homepage.t-online.de/pythonimad实现。它基本上是计算两幅图像的典型相关,然后对它们进行减除。我的问题是 图像是5000 x 5000 x 5(波段)像素。如果我试着运行这个 整个图像我得到一个记忆错误。在
使用pyTables之类的东西能帮助我吗?在
mortconty的代码尝试使用gdal加载图像,然后存储它们 在一个10 x 25000000阵列中。在
# initial weights
wt = ones(cols*rows)
# data array (transposed so observations are columns)
dm = zeros((2*bands,cols*rows))
k = 0
for b in pos:
band1 = indataset1.GetRasterBand(b+1)
band1 = band1.ReadAsArray(x0,y0,cols,rows).astype(float)
dm[k,:] = ravel(band1)
band2 = inDataset2.GetRasterBand(b+1)
band2 = band2.ReadAsArray(x0,y0,cols,rows).astype(float)
dm[bands+k,:] = ravel(band2)
k += 1
即使只是创建一个10 x 25000000 numpy的float数组,也会引发内存错误。有人知道如何避开这个问题吗?这是我有史以来的第一个帖子,所以任何关于如何发帖的建议都将受到欢迎。在
你好
numpy
在默认情况下使用float64
,因此您的dm
-数组占用2GB内存(8*10*25000000),其他数组每个可能约为200MB(~8*5000*5000)。astype(float)
返回一个新数组,因此您也需要内存,而且可能根本不需要,因为在将数据复制到结果数组时,类型是隐式转换的。for循环中使用的内存何时释放取决于垃圾回收。这并没有考虑
GetRasterBand
,ReadAsArray
的内存开销。您确定您的输入数据使用64位浮点吗?如果它使用32位浮点,那么通过在数组上指定
dtype='f'
可以轻松地减少一半的内存使用量。相关问题 更多 >
编程相关推荐