我需要计算 GRASS GIS python 脚本中两个栅格值之间的 TheilSen 回归斜率和截距。此示例中的两个栅格(xtile 和 ytile)都具有相同的尺寸 250x250 像素并包含 nodata(空)值。到目前为止,我只使用了grass.script,所以我是 scipy 的新手。我尝试阅读一些教程,并在此基础上提出了我在命令行上尝试的以下代码:
>>> from scipy import stats
>>> import grass.script as grass
>>> import grass.script.array as garray
>>> x = garray.array(mapname="xtile")
>>> y = garray.array(mapname="ytile")
>>> res_list = stats.theilslopes(y, x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/scipy/stats/_stats_mstats_common.py", line 214, in theilslopes
deltax = x[:, np.newaxis] - x
MemoryError
显然,事情不会这么简单。 编辑:我消除了关于数组维度问题的想法,我错了。现在看来 250x250 数组大小实在是太大了。是这样吗?知道如何避免这种情况吗?
然后似乎还有另一个问题。当我尝试打印数组 x 时,
>>> print x
[[ 0. 0. 0. ... 0. 0. 0.]
[ 0. 0. 0. ... 0. 0. 0.]
[ 0. 402. 0. ... 0. 0. 0.]
...
[ 0. 0. 0. ... 0. 0. 0.]
[ 0. 0. 0. ... 0. 0. 0.]
[ 0. 0. 0. ... 0. 0. 0.]]
看来光栅中的所有 nodata 值都被读取为零到数组中。在所讨论的栅格中,大多数 nodata (或在 GRASS 中命名的 null )像素,在回归中应该被忽略,即。如果栅格 x 或 y 中的任何值是 nodata,则不应在回归计算中使用相应的 x,y 数据对。是否可以在数组中定义 nodata 值,以便以所描述的方式直接忽略这些值,或者是否需要首先从数组对中过滤掉 nodata 对?
谢谢你。