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

如何利用旧均值、旧列表长度与新列表计算合并后正确均值?

如何基于已有均值、旧数据集长度和新数据集计算合并后的正确均值

问题背景

我们已经计算并保存了旧数据集l1的均值m1,但未保留l1的具体内容,仅知道l1的长度n1。现在拿到新数据集l2,需要计算l1与l2合并后的正确均值——注意直接对m1和l2的均值m2取平均是错误的,因为两个数据集长度不同,直接平均会产生偏差。

示例验证

先看两种计算方式的差异:
旧数据集相关代码:

from statistics import mean
l1 = [1,0,1,0,0,0,0,1,1,1,0,1]
m1 = mean(l1)
n1 = len(l1)
print(m1)  # 输出:0.5

新数据集相关代码:

l2 = [1,0,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,1]
m2 = mean(l2)
n2 = len(l2)
print(m2)  # 输出:0.5909090909090909

直接平均两个均值的错误结果:

m3_wrong = mean([m1, m2])
print(m3_wrong)  # 输出:0.5454545454545454

合并数据集计算的正确均值:

m3_correct = mean(l1 + l2)
print(m3_correct)  # 输出:0.5588235294117647

可见两种方式结果差异明显,直接平均两个均值的方法不成立。

解决方案

核心思路是通过总加权和计算均值:
合并后的总数值和 = 旧数据集总和 + 新数据集总和
其中,旧数据集总和 = 旧均值m1 × 旧数据集长度n1,新数据集总和可通过sum(l2)直接计算,或用新均值m2 × 新数据集长度n2推导。

最终合并均值的公式为:

m3 = (m1 * n1 + sum(l2)) / (n1 + n2)

若已算出m2,也可使用:

m3 = (m1 * n1 + m2 * n2) / (n1 + n2)

代码实现

from statistics import mean

# 已知的旧数据信息
m1 = 0.5
n1 = 12

# 新数据集
l2 = [1,0,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,1]
n2 = len(l2)
sum_l2 = sum(l2)

# 计算正确的合并均值
m3 = (m1 * n1 + sum_l2) / (n1 + n2)
print(m3)  # 输出:0.5588235294117647,与合并数据集计算结果一致

或用m2推导的方式:

m2 = mean(l2)
m3 = (m1 * n1 + m2 * n2) / (n1 + n2)
print(m3)  # 同样输出正确结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:09:24