在统计学中,经常需要样本的方差计算,比较麻烦的方式是
(1)第一次遍历计算出样本的平均值
(2)第二次遍历才能计算出样本的方差
上述方法在样本较少的情况下,非常合适,但如果样本非常大,这种方式就不可取了,而且如果样本是持续增长的,就都不适用了。
先上代码
#第一步:遍历一遍样本
样本e in 样本集:
self.n += 1
self.sum += e.val
self.sum_sq += e.val * eval
#第二步:计算样本的均值、均差和方差,
self.mean = self.sum / self.n
tmp = (self.sum_sq - (self.sum * self.sum) / self.n)
self.var = tmp / (self.n - 1)
self.var = math.sqrt(self.var)
test_matlab
x = rand(1,100);
mean_x=mean(x);
std_x=std(x);
sum_x=0;
sum_sq=0;
for i=1:100
sum_x=sum_x+x(i);
sum_sq=sum_sq+x(i)*x(i);
end
sum_mean =sum_x/100;
tmp=sum_sq-sum_x*sum_x/100;
sum_var=tmp/(100-1);
sum_std=sqrt(sum_var);
一次遍历,即可求出样本的方差。
更快捷的方差计算: