Numpy全0数组执行np.where(a[a>=0])返回空数组是什么原因?
问题根因
- 你对
np.where的单参数调用逻辑理解有误:仅传入一个数组作为参数时,np.where会返回该数组内非0、布尔值为True的元素的位置索引。你代码中先执行了a[a>=0]运算,原数组所有元素都是0且满足a>=0的条件,因此切片结果为array([0,0,0,0]),所有元素都被判定为布尔False,最终返回空索引数组。 - 你的写法本身不符合需求:你要获取原数组中值匹配0的索引,直接对原数组做切片
a[a>=0]会丢失原数组的索引对应关系,就算切片后数组内有非0值,返回的也是切片后新数组的索引,而非原数组的索引。
正确实现
如果你的需求是获取原数组中所有值为0的索引,直接传入值判断的布尔数组即可:
import numpy as np a = np.array([0,0,0,0]) res = np.where(a == 0) print(res) # 输出:(array([0, 1, 2, 3], dtype=int64),)
如果需要叠加a>=0的前置过滤条件,组合布尔条件即可:
res = np.where((a >= 0) & (a == 0))
内容的提问来源于stack exchange,提问作者NKR
相关产品推荐
相关产品推荐

