ma.nonzero(self)
Return the indices of unmasked elements that are not zero.
Returns a tuple of arrays, one for each dimension, containing the indices of the non-zero elements in that dimension. The corresponding non-zero values can be obtained with:
a[a.nonzero()]To group the indices by element, rather than dimension, use instead:
np.transpose(a.nonzero())The result of this is always a 2d array, with a row for each non-zero element.
Parameters:NoneReturns:tuple_of_arraystupleIndices of elements that are non-zero.
Examples
>>> importnumpyasnp>>> importnumpy.maasma>>> x=ma.array(np.eye(3))>>> xmasked_array( data=[[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]], mask=False, fill_value=1e+20)>>> x.nonzero()(array([0, 1, 2]), array([0, 1, 2]))Masked elements are ignored.
>>> x[1,1]=ma.masked>>> xmasked_array( data=[[1.0, 0.0, 0.0], [0.0, --, 0.0], [0.0, 0.0, 1.0]], mask=[[False, False, False], [False, True, False], [False, False, False]], fill_value=1e+20)>>> x.nonzero()(array([0, 2]), array([0, 2]))Indices can also be grouped by element.
>>> np.transpose(x.nonzero())array([[0, 0], [2, 2]])A common use for nonzero is to find the indices of an array, where a condition is True. Given an array a, the condition a > 3 is a boolean array and since False is interpreted as 0, ma.nonzero(a > 3) yields the indices of the a where the condition is true.
>>> a=ma.array([[1,2,3],[4,5,6],[7,8,9]])>>> a>3masked_array( data=[[False, False, False], [ True, True, True], [ True, True, True]], mask=False, fill_value=True)>>> ma.nonzero(a>3)(array([1, 1, 1, 2, 2, 2]), array([0, 1, 2, 0, 1, 2]))The nonzero method of the condition array can also be called.
>>> (a>3).nonzero()(array([1, 1, 1, 2, 2, 2]), array([0, 1, 2, 0, 1, 2]))