B.P.Welford提出的增量实时计算样本均值和标准差的算法如下:

对于待计算序列x_{i}\left ( i=0,1,...,N \right ),

当i=0时,初始化avg=x_{0} ,std=0,

1\leq i \leq N时,样本均值及方差的计算公式如下:

avg_{i}=avg_{i-1} + \frac{x_{i}-avg_{i-1}}{i}

std_{i}=std_{i-1}+(x_{i}-avg_{i-1})*(x_{i}-avg_{i})

C语言实现片段如下:

for(i=0;i<N;i++)
{
	if(i==0)
	{
		avg=x[i];
		std=0;
	}
	else
	{
		tmp = avg;
		avg = avg + (x[i] - avg)/(i+1);
		std = std + (x[i] - fTmp)*(x[i] - avg);
	}
}
std = sqrt(std/(N-1));

Logo

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

更多推荐