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

C#中用Lambda计算分组数据均值时索引越界问题求助

修正分组数据均值计算代码

原代码的核心错误是把数据点的值当成了频率数组的索引——比如你的测试数据里有值3,转成索引就是3,但frequency数组长度是3,最大索引是2,直接导致索引越界。分组数据的均值计算逻辑应该是:每个数据点乘以对应位置的频率,求和得到加权总和,再除以频率的总和。

下面是两种修正后的可行方案:

方案1:使用Zip方法配对数据与频率

public double stat_getMeanGrouped(double[] dataset, double[] frequency)
{
    // 先校验两个数组长度是否一致,避免后续逻辑出错
    if (dataset.Length != frequency.Length)
        throw new ArgumentException("数据集和频率数组的长度必须一致");
    
    // 计算每个数据点的加权值并求和
    double weightedSum = dataset.Zip(frequency, (value, freq) => value * freq).Sum();
    // 计算总频率
    double totalFreq = frequency.Sum();
    
    return weightedSum / totalFreq;
}

方案2:使用索引遍历(更直观的基础实现)

public double stat_getMeanGrouped(double[] dataset, double[] frequency)
{
    if (dataset.Length != frequency.Length)
        throw new ArgumentException("数据集和频率数组的长度必须一致");
    
    double weightedSum = 0;
    double totalFreq = 0;
    
    for (int i = 0; i < dataset.Length; i++)
    {
        weightedSum += dataset[i] * frequency[i];
        totalFreq += frequency[i];
    }
    
    return weightedSum / totalFreq;
}

测试你给出的调用示例stat_getMeanGrouped(new double[] {1,2,3}, new double[] {1,1,1}),两种方案都会返回预期的2.0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:00:47