用简单值填充2D数组。索引出错

时间:2019-09-18 10:37:32

标签: numpy indexing raster

我正在使用值填充QGIS插件的新栅格图层。为了重新创建栅格,我使用了Numpy数组。在一个循环中,我用新值填充单元格。对于此示例,我使用的是占位符值,但是该部分工作正常。代码末尾的索引是发生问题的地方。在这种情况下,只有最后一个单元格填充了我想要的值...

  for x1, y1 in np.ndenumerate(rast_int_newLU):
      for x2, y2 in np.ndenumerate(rast_int_oldLU):
          if x1 == x2:
             valueB = rast_int_oldLU[x1]
             valueA = rast_int_newLU[x2]

             dfkey = int(20)
             dt = np.float32

             a = np.ones(rast_int_oldLU.shape, dtype=dt)
             np.around(a, 4)
             indexx = x1[0]
             indexy = x1[1]
             a[indexx][indexy] = dfkey
      print("Output:")
      print(a)

有人知道哪里出错了吗?

1 个答案:

答案 0 :(得分:0)

在@hpaulj的帮助下,我弄清楚了!这是一个典型的初学者错误。数组是在循环内部创建的,因此将其默认值重置为1。只有最后一次迭代不会发生,因此单元格不会转换回1。正确的代码是:

dt = np.float32
a = np.ones(rast_int_oldLU.shape, dtype=dt)

for x1, y1 in np.ndenumerate(rast_int_newLU):
      for x2, y2 in np.ndenumerate(rast_int_oldLU):
          if x1 == x2:
             valueB = rast_int_oldLU[x1]
             valueA = rast_int_newLU[x2]

             dfkey = int(20)

             np.around(a, 4)
             indexx = x1[0]
             indexy = x1[1]
             a[indexx][indexy] = dfkey
      print("Output:")
      print(a)

现在所有值均为20。从逻辑上讲,可以轻松更改此值:)