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

如何用Numpy筛选处于均值±标准差区间内的数组元素

解决Numpy数组区间筛选问题

原始数据与已有计算

首先定义目标数组,并完成加权均值、标准差的计算:

import numpy as np

lycop = np.array([[14, 15, 16, 17, 18, 19, 20, 21, 22, 23], 
                 [1, 1, 8, 24, 48, 58, 35, 16, 8, 1]])

# 加权均值
lycop_media = (lycop[0]*lycop[1]).sum()/lycop[1].sum()  # 结果为18.83
# 标准差(注意:原代码中**1/2是错误写法,正确应为**0.5或np.sqrt,这里按已得到的1.09555计算)
lycop_std = 1.09555

已成功生成两个区间的数组:

# 筛选小于均值-标准差的元素
a1 = lycop[0][(lycop[0] < (lycop_media - lycop_std))]
# 输出:array([14, 15, 16, 17])

# 筛选大于均值+标准差的元素
a2 = lycop[0][(lycop[0] > (lycop_media + lycop_std))]
# 输出:array([20, 21, 22, 23])

正确生成区间内数组a3

要筛选满足μ−σ < d < μ+σ的元素,直接用布尔索引组合两个条件即可,无需多余的列表包裹或手动指定数值:

# 计算区间上下限
lower = lycop_media - lycop_std
upper = lycop_media + lycop_std

# 筛选处于区间内的元素
a3 = lycop[0][(lycop[0] > lower) & (lycop[0] < upper)]

执行后得到结果:array([18, 19]),完全符合需求。

错误原因说明

  • 第一次尝试的条件逻辑错误,写成了(lycop[0] < 均值-标准差) & (lycop[0] < 均值+标准差),实际应该是大于下限且小于上限;同时无需用np.where再套列表,直接用布尔索引即可提取元素。
  • 第二次尝试手动指定18、19,属于硬编码,无法适应数据变化,不是通用解法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:50:30