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

如何优化区间观测值占比计算函数?无需手动指定上界包含性

优化方案与简化实现

首先指出原函数的两处问题:

  • 代码存在变量名错误:assessment1marks应替换为参数observations,否则运行会抛出未定义变量的错误。
  • include_upper参数冗余,需要手动指定的逻辑不符合你想要的自动化区间判断需求。

以下是针对你的需求给出的几种简洁高效的实现方式:

方式一:单区间自动处理,无需手动指定上界包含逻辑

默认遵循「左闭右开」规则,若传入的上界是观测值的最大值,则自动包含该值,完美匹配你说的「除最后一个区间外,上界归入下一个区间」的场景:

import numpy as np

def compute_interval_proportion(observations, lower_bound, upper_bound):
    """
    计算观测值在指定区间内的占比
    规则:默认左闭右开;若upper_bound为观测值最大值,自动转为包含上界
    """
    max_val = np.max(observations)
    include_upper = upper_bound == max_val
    
    # 合并条件判断,避免重复代码
    mask = (observations >= lower_bound) & (
        observations <= upper_bound if include_upper else observations < upper_bound
    )
    # 用np.mean直接计算占比,比手动统计长度更高效
    proportion = round(np.mean(mask), 3)
    
    return proportion

方式二:多区间批量统计(更贴合实际业务场景)

如果你的需求是批量统计多个区间的占比(比如同时统计0-50、50-70、70-100的分数占比),可以用numpy.digitize自动处理区间划分,完全无需手动干预上界逻辑:

import numpy as np

def compute_multi_interval_proportions(observations, bins):
    """
    批量计算多组区间的占比,默认左闭右开,最后一个区间自动包含上界
    参数bins:区间分界点列表,例如[0,50,70,100]对应区间[0,50)、[50,70)、[70,100]
    """
    # digitize自动返回每个元素所属的区间索引,默认左闭右开规则
    indices = np.digitize(observations, bins, right=False)
    # 统计每个区间的元素数量,过滤掉超出分界点的异常值
    counts = np.bincount(indices, minlength=len(bins))[1:-1]
    proportions = np.round(counts / len(observations), 3)
    
    # 生成可读性强的区间标签,返回键值对结果
    interval_labels = [
        f"[{bins[i]}, {bins[i+1]}{']' if i == len(bins)-2 else ')'}" 
        for i in range(len(bins)-1)
    ]
    return dict(zip(interval_labels, proportions))

使用示例

scores = np.array([45, 60, 70, 85, 95, 50, 69, 71, 100])
print(compute_multi_interval_proportions(scores, [0,50,70,100]))
# 输出:{'[0, 50)': 0.222, '[50, 70)': 0.222, '[70, 100]': 0.556}

额外优化提示

  • 原函数中用np.where获取索引再统计长度的方式,不如直接使用布尔数组的sum()或np.mean()高效,numpy的向量化操作比索引遍历性能提升明显。
  • 可以添加输入验证逻辑,比如检查lower_bound <= upper_bound,避免传入无效参数导致错误。

内容的提问来源于stack exchange,提问作者Dan Öz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:45:54