使用 2D 索引数组对 3D 数组值进行 Numpy 赋值

我有一个 3D numpy 零数组,尺寸为 CxHxW(在本例中,C=4、H=2 和 W=3):


A = np.array([[[0, 0, 0],

               [0, 0, 0]],

              [[0, 0, 0],

               [0, 0, 0]]

              [[0, 0, 0],

               [0, 0, 0]]

              [[0, 0, 0],

               [0, 0, 0]]])

我还有一个二维索引数组,尺寸为 HxW,这样数组中的每个值都是 [0, C-1] 之间的有效索引


B = np.array([[2, 3, 0], 

              [3, 1, 2]])

有没有一种快速的方法,使用向量化来修改数组 A,使得 A[B[i][j]][i][j] = 1,对于所有有效的 i、j?


A = np.array([[[0, 0, 1],

               [0, 0, 0]],

              [[0, 0, 0],

               [0, 1, 0]]

              [[1, 0, 0],

               [0, 0, 1]]

              [[0, 1, 0],

               [1, 0, 0]]]) 

谢谢你!


PIPIONE
浏览 62回答 1
1回答

互换的青春

您似乎正在寻找put_along_axis:np.put_along_axis(A, B[None,...], 1, 0)请注意,第二个参数需要与第一个参数具有相同的维数,这就是为什么B[None,...]使用 而不是B。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python