numpy:多个值的索引

时间:2018-07-10 00:09:23

标签: python numpy indexing indices

我想通过有效地将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很大时,这可能会变得无效。

2 个答案:

答案 0 :(得分:2)

使用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]]

答案 1 :(得分:1)

根据@ Miket25的回答,实际上不需要添加np.where层。 np.isin(A, [10, 1])返回一个布尔数组,该数组可以完全用作索引。只需

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