一、通用公式
设当前已有 N 个数据点,当前均值为 mean,新数据点为 new_val,则更新后的均值与方差为:

new_mean=old_mean+new_val−old_meanN+1​new\_mean=old\_mean+\frac{new\_val−old\_mean}{N+1}​new_mean=old_mean+N+1new_valold_mean
new_M2n=old_M2n+(new_val−old_mean)∗(new_val−new_mean)new\_M2_n = old\_M2_n + (new\_val−old\_mean) * (new\_val−new\_mean) new_M2n=old_M2n+(new_valold_mean)(new_valnew_mean)

其中:

初始时 N=0,mean 可初始化为 0 或第一个数据点。
每次处理一个新数据点后,N 自增 1。
M2nM2_nM2n 是累计平方差之和

double mean = 0.0;
double M2 = 0.0;
int N = 0;

void update(double x) {
    N++;
    double delta = x - mean;
    mean += delta / N;
    double delta2 = x - mean;
    M2 += delta * delta2;
}

// 获取样本方差
double getVariance() {
    if (N < 2) return 0.0; // 避免除以0
    return M2 / (N - 1);
}
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐