我有一个numpy数组和一个索引数组,我怎样才能同时访问这些位置

时间:2016-10-14 08:31:37

标签: python arrays numpy

例如,我有像这样的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]])

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拆分为列。