我目前正在使用在线方差算法来计算给定序列的方差。这很好用,并且还提供了良好的数值稳定性和抗溢出性,但代价是一些速度,这很好。我的问题是,如果样本均值已知,是否存在比这更快的算法,同时具有相似的稳定性和抗溢出性(因此不像天真的方差计算)。
当前的在线方差计算是单遍算法,在主循环中包含除法和乘法(这是影响速度的因素)。来自维基百科:
def online_variance(data):
n = 0
mean = 0
M2 = 0
for x in data:
n = n + 1
delta = x - mean
mean = mean + delta/n
M2 = M2 + delta*(x - mean)
variance = M2/(n - 1)
return variance