Use numpy.argwhere to obtain the matching values in an np.array

后端 未结 2 1586
名媛妹妹
名媛妹妹 2021-02-08 13:24

I\'d like to use np.argwhere() to obtain the values in an np.array.

For example:

z = np.arange(9).reshape(3,3)

[[0 1 2]
 [3 4          


        
2条回答
  •  有刺的猬
    2021-02-08 13:58

    Source for argwhere

    def argwhere(a):
        """
        Find the indices of array elements that are non-zero, grouped by element.
        ...
        """
        return transpose(nonzero(a))
    

    np.where is the same as np.nonzero.

    In [902]: z=np.arange(9).reshape(3,3)
    In [903]: z%3==0
    Out[903]: 
    array([[ True, False, False],
           [ True, False, False],
           [ True, False, False]], dtype=bool)
    In [904]: np.nonzero(z%3==0)
    Out[904]: (array([0, 1, 2], dtype=int32), array([0, 0, 0], dtype=int32))
    In [905]: np.transpose(np.nonzero(z%3==0))
    Out[905]: 
    array([[0, 0],
           [1, 0],
           [2, 0]], dtype=int32)
    
    In [906]: z[[0,1,2], [0,0,0]]
    Out[906]: array([0, 3, 6])
    

    z[np.nonzero(z%3==0)] is equivalent to using I,J as indexing arrays:

    In [907]: I,J =np.nonzero(z%3==0)
    In [908]: I
    Out[908]: array([0, 1, 2], dtype=int32)
    In [909]: J
    Out[909]: array([0, 0, 0], dtype=int32)
    In [910]: z[I,J]
    Out[910]: array([0, 3, 6])
    

提交回复
热议问题