You need to enable JavaScript to run this app. Python基于NumPy实现相邻边界区间数组值求和的函数修正
优惠活动
大模型
产品
解决方案
定价
更多

Python基于NumPy实现相邻边界区间数组值求和的函数修正

边界区间数值求和逻辑修正

偏差核心原因

  • np.digitize的默认分类会额外生成两个有效区间外的类别:所有小于最小边界值的元素归为0类,所有大于等于最大边界值的元素归为长度等于边界数组长度的类,这两个类别的求和值不属于目标计算范围
  • np.bincount的输出长度由最大分类值决定,没有对齐相邻边界构成的固定区间数(排序后边界数组长度减1),导致输出长度、元素顺序不符合预期

修正实现

核心调整逻辑:

  • 提前计算固定区间总数 = 排序后边界数组长度 - 1,保证输出长度严格匹配区间数量
  • 过滤掉落在所有边界范围外的无效元素,仅保留落在相邻边界区间内的元素参与求和
  • 将有效分类的索引偏移为从0开始的连续序列,通过minlength参数强制bincount输出固定长度的结果,无匹配元素的区间自动补0
    修正后的完整代码:
import numpy as np

def formating(a, b):
    x = np.sort(b)
    n_intervals = len(x) - 1
    l = np.digitize(a, x)
    # 筛选落在有效边界范围内的元素
    valid_mask = (l >= 1) & (l <= len(x) - 1)
    valid_l = l[valid_mask] - 1
    valid_weights = a[valid_mask]
    # 生成固定长度的加权求和结果
    result = np.bincount(valid_l, weights=valid_weights, minlength=n_intervals)
    return result

Numbers = np.array([3, 4, 5, 7, 8, 10,20])
limit1 = np.array([0, 2 , 5, 12, 15])
limit2 = np.array([0, 2 , 5, 12])
limit3 = np.array([0, 2 , 5, 12, 15, 22])

result1= formating(Numbers, limit1)
result2= formating(Numbers, limit2)
result3= formating(Numbers, limit3)

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

result1:  [ 0.  7. 30.  0.] 
result2:  [ 0.  7. 30. ] 
result3:  [ 0.  7. 30.  0. 20.]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 22:54:00