我正在使用 ArcGIS 焦点统计工具将空间自相关添加到随机栅格中,以对 DEM 中的误差进行建模。输入 DEM 的像素大小为 1.5m,半变异函数显示出 2000m 左右的基台。我想确保对模型中输入的自相关程度进行建模。
不幸的是,ArcGIS 要求输入内核采用 ASCII 格式,其中第一行定义大小,后续行定义权重。
示例:
5 5
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
我需要生成一个具有反距离加权的 1333x1333 内核,并立即转到 python 来完成此操作。是否可以在numpy中生成矩阵并按环赋值? numpy 中是否存在更好的编程工具来生成纯文本矩阵。
这类似于 this question ,但我需要有一个固定的中心值和降序环,如上面的示例所示。
注意:我是一名学生,但这不是作业……那些作业几年前就结束了。这是我正在开展的一个更大的研究项目的一部分,任何帮助(即使只是朝着正确的方向插入)将不胜感激。这项工作的重点不是对内核进行编程,而是探索 DEM 中的错误。
最佳答案
我不确定是否有内置方法,但推出自己的方法应该不难:
>>> def kernel_thing(N):
... import numpy as np
... n = N // 2 + 1
... a = np.zeros((N, N), dtype=int)
... for i in xrange(n):
... a[i:N-i, i:N-i] += 1
... return a
...
>>> def kernel_to_string(a):
... return '{} {}\n'.format(a.shape[0], a.shape[1]) + '\n'.join(' '.join(str(element) for element in row) for row in a)
...
>>> print kernel_to_string(kernel_thing(5))
5 5
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
>>> print kernel_to_string(kernel_thing(6))
6 6
1 1 1 1 1 1
1 2 2 2 2 1
1 2 3 3 2 1
1 2 3 3 2 1
1 2 2 2 2 1
1 1 1 1 1 1
>>> print kernel_to_string(kernel_thing(17))
17 17
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1
1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 2 1
1 2 3 4 4 4 4 4 4 4 4 4 4 4 3 2 1
1 2 3 4 5 5 5 5 5 5 5 5 5 4 3 2 1
1 2 3 4 5 6 6 6 6 6 6 6 5 4 3 2 1
1 2 3 4 5 6 7 7 7 7 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 8 8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 8 8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 7 7 7 7 6 5 4 3 2 1
1 2 3 4 5 6 6 6 6 6 6 6 5 4 3 2 1
1 2 3 4 5 5 5 5 5 5 5 5 5 4 3 2 1
1 2 3 4 4 4 4 4 4 4 4 4 4 4 3 2 1
1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 2 1
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
关于python - 使用 Numpy 生成 ASCII 内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9560616/