Numpy:多个值的索引

Numpy: Indices of multiple values

我想通过高效索引将二维数组的某些值设置为特定数字。

假设我有一个 2D numpy 数组,

A = array([[1, 6, 6],
           [9, 7, 7], 
           [10, 2, 2]])

并且我想获取数组中属于一组数字的索引,比如 indList=[10, 1] 以便我可以将它们设置为零。但是,indList 可能是一个巨大的列表。

有没有不用 for 循环的更快的方法?

作为 for 循环,

indList = [10, 1]
for i in indList:
    A[A==i] = 0

但是当 indList 很大时,这会变得低效。

使用 numpy,您可以通过首先找到 indList 中元素的索引然后将它们设置为零来对其进行矢量化。

A = np.array([[1, 6, 6],
              [9, 7, 7],
              [10 ,2 ,2]])

A[np.where(np.isin(A, [10,1]))] = 0

这给出了

A = [[0 6 6]
     [9 7 7]
     [0 2 2]]

从@Miket25 的回答来看,实际上不需要添加 np.where 层。 np.isin(A, [10, 1]) returns 一个完全可以接受的布尔数组作为索引。所以简单地做

A[np.isin(A, [10, 1])] = 0