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

NumPy如何不使用if语句仅提取条件匹配的数组元素

NumPy按条件提取对应数组元素的实现方法

你当前使用的np.where(b =='yes',a,0)属于三目逻辑的逐元素映射:位置满足条件时取a对应值,不满足就取你传入的第三个参数0,所以返回结果和原数组长度一致,会保留不匹配位置的填充值,无法直接得到筛选后的压缩结果。

不需要写if条件判断,直接用NumPy原生布尔索引就能实现需求,代码如下:

import numpy as np

# 定义示例数组
a = np.array([27, 28, 29, 21, 17, 15, 19, 22, 18, 23, 24, 25, 30, 26])
b = np.array(['no', 'no', 'yes', 'yes', 'yes', 'no', 'yes', 'no', 'yes', 'yes', 'yes', 'yes', 'yes', 'no'], dtype=object)

# 布尔索引直接筛选
res = a[b == 'yes']

运行后res的输出完全匹配你的预期:

array([29, 21, 17, 19, 18, 23, 24, 25, 30])

实现原理

  • b == 'yes'会生成一个和b长度相同的布尔型数组,匹配yes的位置值为True,其余位置为False
  • 把这个布尔数组作为索引传入a时,NumPy会自动保留布尔值为True位置的a元素,丢弃False位置的元素,不会生成占位填充值,直接返回筛选后的元素集合

如果你习惯用np.where的写法,也可以取np.where返回的索引数组来做索引,效果完全一致:

res = a[np.where(b == 'yes')[0]]

内容的提问来源于stack exchange,提问作者rk___

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:03:19