Find indices of elements equal to zero in a NumPy array

前端 未结 8 1302
孤城傲影
孤城傲影 2020-11-29 17:28

NumPy has the efficient function/method nonzero() to identify the indices of non-zero elements in an ndarray object. What is the most efficient way to obtain th

相关标签:
8条回答
  • 2020-11-29 17:36

    You can also use nonzero() by using it on a boolean mask of the condition, because False is also a kind of zero.

    >>> x = numpy.array([1,0,2,0,3,0,4,5,6,7,8])
    
    >>> x==0
    array([False, True, False, True, False, True, False, False, False, False, False], dtype=bool)
    
    >>> numpy.nonzero(x==0)[0]
    array([1, 3, 5])
    

    It's doing exactly the same as mtrw's way, but it is more related to the question ;)

    0 讨论(0)
  • 2020-11-29 17:42

    I would do it the following way:

    >>> x = np.array([[1,0,0], [0,2,0], [1,1,0]])
    >>> x
    array([[1, 0, 0],
           [0, 2, 0],
           [1, 1, 0]])
    >>> np.nonzero(x)
    (array([0, 1, 2, 2]), array([0, 1, 0, 1]))
    
    # if you want it in coordinates
    >>> x[np.nonzero(x)]
    array([1, 2, 1, 1])
    >>> np.transpose(np.nonzero(x))
    array([[0, 0],
           [1, 1],
           [2, 0],
           [2, 1])
    
    0 讨论(0)
  • 2020-11-29 17:45

    There is np.argwhere,

    import numpy as np
    arr = np.array([[1,2,3], [0, 1, 0], [7, 0, 2]])
    np.argwhere(arr == 0)
    

    which returns all found indices as rows:

    array([[1, 0],    # Indices of the first zero
           [1, 2],    # Indices of the second zero
           [2, 1]],   # Indices of the third zero
          dtype=int64)
    
    0 讨论(0)
  • 2020-11-29 17:49
    import numpy as np
    
    x = np.array([1,0,2,3,6])
    non_zero_arr = np.extract(x>0,x)
    
    min_index = np.amin(non_zero_arr)
    min_value = np.argmin(non_zero_arr)
    
    0 讨论(0)
  • 2020-11-29 17:50

    You can use numpy.nonzero to find zero.

    >>> import numpy as np
    >>> x = np.array([1,0,2,0,3,0,0,4,0,5,0,6]).reshape(4, 3)
    >>> np.nonzero(x==0)  # this is what you want
    (array([0, 1, 1, 2, 2, 3]), array([1, 0, 2, 0, 2, 1]))
    >>> np.nonzero(x)
    (array([0, 0, 1, 2, 3, 3]), array([0, 2, 1, 1, 0, 2]))
    
    0 讨论(0)
  • 2020-11-29 17:52

    You can search for any scalar condition with:

    >>> a = np.asarray([0,1,2,3,4])
    >>> a == 0 # or whatver
    array([ True, False, False, False, False], dtype=bool)
    

    Which will give back the array as an boolean mask of the condition.

    0 讨论(0)
提交回复
热议问题