You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 07:33:21