根据 2D 索引替换 2D numpy 数组元素

Ach*_*age 2 python arrays indexing numpy

这个问题可能以前在某个地方被问过,但经过一番搜索后我找不到任何问题,因此在此发布。

假设我有一个数组A和一个索引数组idx。暂时让两个数组都是二维的。

import numpy as np

A = np.array([[3,3,4],
              [4,5,4],
              [3,4,5]])

idx = np.array([[1,1],
                [2,1],
                [1,0],
                [0,0]])
Run Code Online (Sandbox Code Playgroud)

现在我想根据toA中的索引替换相应的元素。基本上,我想做,但行不通。idx0A[idx]=0

如何在不运行循环的情况下有效地完成此操作?

优选地,所提出的解决方案应该可扩展到更高维度(3D及以上)的阵列。

Ehs*_*san 9

你可以试试:

A[idx[:,0], idx[:,1]]=0
Run Code Online (Sandbox Code Playgroud)

输出:

[[0 3 4]
 [0 0 4]
 [3 0 5]]
Run Code Online (Sandbox Code Playgroud)

如果维度数量过多而无法对其进行硬编码,则可以使用:

A[tuple(idx.T)]=0
Run Code Online (Sandbox Code Playgroud)