我正在使用GDAL工作在Python栅格上的项目。这些栅格或图像可能会变得很大,所以我通常在Numpy中使用内存映射来加载它们。目前我想对内存映射的Numpy阵列进行距离变换操作。我试图使用Scipy的distance_transform_edt函数,但是,这个函数返回结果的一个副本在内存中,我最终得到一个内存错误。如何使用Scipy进行高效的距离变换操作?
561, in distance_transform_dataset
dest_array = ndimage.distance_transform_edt(source_array) * pixel_size
File "/usr/local/lib/python2.7/dist-packages/scipy/ndimage/morphology.py", line 2173,
in distance_transform_edt
input = numpy.atleast_1d(numpy.where(input, 1, 0).astype(numpy.int8))
MemoryError
None
很多次这样的函数都会有'out'参数来写结果。这个函数没有,所以我不能写入内存映射的numpy数组。
任何想法如何做一个大numpy阵列上的内存有效的距离变换计算将不胜感激。谢谢。
在较小的切片上执行几个操作或修改代码以在原地执行操作。 – jfs