Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 大卫星图像处理_Python_Satellite Image_Large Data_Bigdata - Fatal编程技术网

Python 大卫星图像处理

Python 大卫星图像处理,python,satellite-image,large-data,bigdata,Python,Satellite Image,Large Data,Bigdata,我试图在双时态RapidEye多光谱图像上运行Mort Canty的Python iMAD实现。这基本上是计算两幅图像的典型相关,然后减去它们。我的问题是 图像为5000 x 5000 x 5(波段)像素。如果我试着在上面运行这个 整个图像我得到一个记忆错误 使用pyTables之类的工具能帮我解决这个问题吗 Mort Canty的代码试图做的是使用gdal加载图像,然后存储它们 在10 x 25000000阵列中 # initial weights wt = ones(cols

我试图在双时态RapidEye多光谱图像上运行Mort Canty的Python iMAD实现。这基本上是计算两幅图像的典型相关,然后减去它们。我的问题是 图像为5000 x 5000 x 5(波段)像素。如果我试着在上面运行这个 整个图像我得到一个记忆错误

使用pyTables之类的工具能帮我解决这个问题吗

Mort Canty的代码试图做的是使用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的浮点数组也会抛出一个内存错误。有人知道如何避开这个问题吗?这是我的第一篇帖子,所以任何关于如何发帖的建议都是欢迎的


问候语
numpy
在默认情况下使用
float64
,因此您的
dm
-数组占用2GB内存(8*10*25000000),其他数组可能每个大约200MB(~8*5000*5000)

astype(float)
返回一个新数组,因此也需要内存,甚至可能不需要内存,因为将数据复制到结果数组时会隐式转换类型

for循环中使用的内存何时释放取决于垃圾回收。这并没有考虑<代码> GeTraceBeope<代码>的内存开销,<代码> Read Stase
您确定您的输入数据使用64位浮点吗?如果它使用32位浮点,通过在数组中指定
dtype='f'
,可以轻松地将内存使用量减半。

如果我将dtype指定为'f':回溯(最近一次调用):文件“C:\pythonxy\iMad.py”,第172行,在main()文件“C:\pythonxy\iMad.py”中,第79行,在main dm=0中((2*bands,cols*rows),dtype='f')MemoryError顺便问一下,我有8 GB的ram。有没有简单的方法,例如,用pytables将这些大数组写入hdf5文件,并像通常的numpy数组一样对它们进行操作?