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