在NumPy数组中查找等于零的元素索引

202 投票
9 回答
395279 浏览
提问于 2025-04-16 09:21

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] 就可以取出元组里的唯一一个元素。

撰写回答