例如,我有像这样的numpy数组
a =
array([[1, 2, 3],
[4, 3, 2]])
并像这样索引以选择最大值
max_idx =
array([[0, 2],
[1, 0]])
如何同时访问这些位置,进行修改。 喜欢" a [max_idx] = 0"得到以下
array([[1, 2, 0],
[0, 3, 2]])
答案 0 :(得分:1)
只需使用subscripted-indexing
-
a[max_idx[:,0],max_idx[:,1]] = 0
如果您正在使用更高维数组并且不想为每个轴键入max_idx
切片,则可以使用linear-indexing
分配zeros
,如此 - < / p>
a.ravel()[np.ravel_multi_index(max_idx.T,a.shape)] = 0
示例运行 -
In [28]: a
Out[28]:
array([[1, 2, 3],
[4, 3, 2]])
In [29]: max_idx
Out[29]:
array([[0, 2],
[1, 0]])
In [30]: a[max_idx[:,0],max_idx[:,1]] = 0
In [31]: a
Out[31]:
array([[1, 2, 0],
[0, 3, 2]])
答案 1 :(得分:0)
像这样的Numpy支持advanced slicing:
a[b[:, 0], b[:, 1]] = 0
上面的代码符合您的要求。
如果b
超过2-D。更好的方法应该是这样的:
a[np.split(b, 2, axis=1)]
np.split会将ndarray拆分为列。