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

时间:2020-04-28 22:20:12

标签: python arrays numpy indexing

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

说我有一个数组A和一个索引数组idx。暂时将两个数组都设为2D。

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

现在,我想基于Aidx中的索引替换0中的相应元素。 基本上,我想做A[idx]=0,这是行不通的。

如何在不运行循环的情况下有效地做到这一点?

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

1 个答案:

答案 0 :(得分:2)

您可以尝试:

A[idx[:,0], idx[:,1]]=0

输出:

[[0 3 4]
 [0 0 4]
 [3 0 5]]

如果尺寸过多,无法对其进行硬编码,则可以使用:

A[tuple(idx.T)]=0