【问题标题】:Python numpy assigning values to a 2D array using another array with ordered pairs as indices to the 2D arrayPython numpy 使用另一个数组将值分配给二维数组,其中有序对作为二维数组的索引
【发布时间】:2019-04-05 19:36:24
【问题描述】:

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

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]]

有谁知道这样做的快速而优雅的方式?

谢谢!

【问题讨论】:

  • im[x, y] = 9 工作吗?
  • 哈哈...是的,确实如此!我可以发誓我试过了!哦,好吧,这不是我最近做过的最愚蠢的事情,但它就在那里:)

标签: python arrays numpy indexing


【解决方案1】:

你可以简单地做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]])

【讨论】:

  • 这只是重复cmets中所说的
【解决方案2】:

一般来说,如果你有一个 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]
        ])

【讨论】:

  • 这只是重复cmets中所说的
  • @RafaelC 我还想补充一点,您也可以提供一个值列表,这在 cmets 中没有给出。
猜你喜欢
  • 2012-04-10
  • 1970-01-01
  • 2021-06-04
  • 2020-07-30
  • 2021-03-03
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 2015-06-16
相关资源
最近更新 更多