在NumPy数组中查找等于零的元素索引
NumPy有一个很实用的功能叫做 nonzero()
,它可以帮助我们找到一个 ndarray
对象中非零元素的位置。那有没有什么更有效的方法来获取那些值为零的元素的位置呢?
9 个回答
29
你可以用下面的方式来查找任何标量条件:
>>> a = np.asarray([0,1,2,3,4])
>>> a == 0 # or whatver
array([ True, False, False, False, False], dtype=bool)
这样做会返回一个数组,里面是这个条件的布尔值(真或假)掩码。
58
这里有一个叫做 np.argwhere
的东西,
import numpy as np
arr = np.array([[1,2,3], [0, 1, 0], [7, 0, 2]])
np.argwhere(arr == 0)
它会把找到的所有位置以行的形式返回:
array([[1, 0], # Indices of the first zero
[1, 2], # Indices of the second zero
[2, 1]], # Indices of the third zero
dtype=int64)
304
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])
这个 where
方法会返回一个包含多个数组的元组,每个数组对应输入数据的不同维度。因为输入数据是一维的,所以用 [0]
就可以取出元组里的唯一一个元素。