我有另一个问题。
我必须为数字高程模型中的每个单元格计算斜率。应在具有3x3形状单元的移动窗口中计算每个中心单元的斜率,并根据公式:
Slope = max | x9-xi | / A;其中值i是从1到8的值,值x9是窗口的中心。 A是到相邻小区中点的距离。因此,对于与中心对角的单元格,距离(A)是sqrt(2)乘以分辨率,而其他距离则等于分辨率。
所以我不知道的是如何编写一个与对角线不同的代码不同的代码?我用'无值'创建了一个空的numpy数组,我希望斜率值具有相同的分辨率。我知道我必须循环遍历行和列,并且必须忽略第一行和最后一行和列。 到目前为止我的代码:
import numpy as np
import matplotlib.pyplot as plt
dem=np.loadtxt('dem.txt',dtype='int',delimiter=',')
(rows,cols)=np.shape(dem)
slope2=np.zeros((rows,cols))
for r in xrange(1,rows-1):
for c in xrange(1,cols-1):
temp_win=dem[r-1:r+2,c-1:c+2]
mid= temp_win[1,1]
max_d=np.max([temp_win[0,0]],[temp_win[0,2]],[temp_win[2,0]],[temp_win[2,2]])
max_1=np.max([temp_win[1,1]],[temp_win[1,0]],[temp_win[1,2]],[temp_win[2,1]])
slope = (np.max([np.abs(mid-max_d)/np.sqrt(2)]),np.max([np.abs(mid-s1/np.sqrt(2))])
slope_2 = slope[r,c]
有没有人有任何想法,我真的很感激一些帮助?
答案 0 :(得分:0)
here is your 3 by 3 array, with its indexes
for i in range(3):
for j in range(3):
print((i, j) , end=' ')
print()
(0, 0) (0, 1) (0, 2)
(1, 0) (1, 1) (1, 2)
(2, 0) (2, 1) (2, 2)
要对角线,你必须给出一行或一列偏移量。 column_index = 2
# diagonal (2,0)(1,1)(0,2)
column_index = 2
for i in range(3):
for j in range(3):
print((j + column_index,i), end=' ')
column_index -=1
break
(2, 0) (1, 1) (0, 2)
答案 1 :(得分:0)
max_1 = np.max([temp_win [1,1]],[temp_win [1,0]],[temp_win [1,2]],[temp_win [2,1]]) 应该 max_1 = np.max([temp_win [0,1]],[temp_win [1,0]],[temp_win [1,2]],[temp_win [2,1]]) 因为1,1是中期
然而,在我看来,如果mid的高度高于某些舍入节点且低于其他舍入节点,或者如果某些低于0,则代码将无效。 如果它是你所追求的,你应该比较8个斜率并取其最大值。