这个问题可能在以前的某个地方被问过,但经过一番搜索我找不到任何东西,因此发布在这里。
说我有一个数组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]])
现在,我想基于A
至idx
中的索引替换0
中的相应元素。
基本上,我想做A[idx]=0
,这是行不通的。
如何在不运行循环的情况下有效地做到这一点?
优选地,所提出的解决方案应该可扩展至更高维度(3D及以上)的阵列。
答案 0 :(得分:2)
您可以尝试:
A[idx[:,0], idx[:,1]]=0
输出:
[[0 3 4]
[0 0 4]
[3 0 5]]
如果尺寸过多,无法对其进行硬编码,则可以使用:
A[tuple(idx.T)]=0