从numpy数组中查找等于零的元素的索引

NumPy具有有效的函数/方法ndarray nonzero()来标识ndarray对象中非零元素的ndarray 。 什么是获得值为零的元素的最有效的方法?

numpy.where()是我的最爱。

 >>> x = numpy.array([1,0,2,0,3,0,4,5,6,7,8]) >>> numpy.where(x == 0)[0] array([1, 3, 5]) 

您可以search任何标量条件:

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

这将返回数组作为条件的布尔值掩码。

我不能相信它已经没有提到,但有np.argwhere

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

它将所有find的索引作为行返回:

 array([[1, 0], # indices of the first zero [1, 2], # indices of the second zero [2, 1]], # indices of the third zero dtype=int64) 

您也可以在条件的布尔型掩码上使用nonzero() ,因为False也是一种零。

 >>> 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]) 

它和mtrw的方式完全一样,但更多与这个问题有关;)

如果你正在使用1d数组,有一个糖语法

 >>> x = numpy.array([1,0,2,0,3,0,4,5,6,7,8]) >>> numpy.flatnonzero(x == 0) array([1, 3, 5]) 
 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)