Python numpy使用另一个具有有序对的数组作为2D数组的索引,将值分配给2D数组

时间:2019-04-05 19:36:25

标签: python arrays numpy indexing

这很难用语言来描述,但在实践中很容易看到。我有一个2D数组:

im = np.array([[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]])

我将其解释为4x4灰度图像-因此数组中的值只是强度。因此,首先,im是:

[[0,0,0,0],
 [0,0,0,0],
 [0,0,0,0],
 [0,0,0,0]]

我希望能够根据x值数组和y值数组一次更改“图像”中的许多值。我将它们组装成看起来像第二个数组中的有序对:

x = [0,1]
y = [2,3]
coords = np.array([x,y]).T

现在coords看起来像这样:

array([[0, 2],
       [1, 3]])

最后,我想按坐标索引im。我想也许是这样的:

im[coords] = 9

...但这不起作用。我希望im的最终结果是:

[[0,0,9,0],
 [0,0,0,9],
 [0,0,0,0],
 [0,0,0,0]]

有人知道快速,优雅的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

通常,如果您有一个numpy数组

import numpy as np
arr = np.array([[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]])
x_coords = [0, 1]
y_coords = [2, 3]
values = [8, 9]

然后

arr[x, y] = values

将导致

  array([
        [0, 0, 8, 0],
        [0, 0, 0, 9],
        [0, 0, 0, 0],
        [0, 0, 0, 0]
        ])

答案 1 :(得分:0)

您只需执行im[x,y] = 9

例如:

im = np.array([[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]])
x = [0,1]
y = [2,3]
im[x,y] = 9
print(im)
# Result:
# array([[0, 0, 9, 0],
#        [0, 0, 0, 9],
#        [0, 0, 0, 0],
#        [0, 0, 0, 0]])