为何用numpy where()筛选偶数,返回结果看似是奇数?
问题解析:np.where返回索引而非元素的误解
问题根源
你混淆了np.where()的返回值含义:当仅传入条件表达式时,np.where()返回的是满足条件的元素在数组中的索引,而不是元素本身。
你看到的结果(array([1, 3, 5, 7, 9, 11], dtype=int64),)是一维数组中偶数元素的索引(数组索引从0开始):
- 索引1对应原数组的
2 - 索引3对应原数组的
4 - ...
- 索引11对应原数组的
12
这些索引对应的元素才是你要找的偶数,你误把索引值当成了元素值,所以产生了困惑。
正确获取偶数元素的方法
如果想要直接得到数组中的偶数元素,有两种简洁的方式:
方法1:布尔索引(推荐)
直接用条件表达式作为数组的索引,筛选出符合条件的元素:
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) even_numbers = arr[arr % 2 == 0] print(even_numbers) # 输出:array([ 2, 4, 6, 8, 10, 12])
方法2:通过np.where索引取值
也可以利用np.where返回的索引,再从原数组中提取元素:
even_indices = np.where(arr % 2 == 0) even_numbers = arr[even_indices] print(even_numbers) # 输出:array([ 2, 4, 6, 8, 10, 12])
验证原索引对应的元素
你可以直接通过索引验证结果的正确性:
print(arr[even_numbers_in_array[0]]) # 输出:array([ 2, 4, 6, 8, 10, 12])
内容的提问来源于stack exchange,提问作者eminaruk
相关产品推荐
相关产品推荐

