我将此作为在线计算可变长度数据数组的方差和均值的参考:http: //www.johndcook.com/standard_deviation.html。
数据是一组 16 位无符号值,可以有任意数量的样本(实际上,最小值约为 20 个样本,最大值约为 2e32 个样本。
由于数据集可能太大而无法存储,我已经使用上面提到的 C 在线算法实现了这一点,并验证了它的计算是否正确。
问题始于对应用程序的以下要求:除了计算整个集合的方差和均值外,我还需要计算由中间 50% 值组成的总体的分离结果(均值和方差),即忽略前 25% 和后 25% 的样本。事先不知道样本的数量,所以我必须在线计算附加集。
我知道我可以通过单独计算来添加和减去一个子集,并且它们使用类似于此处描述的 operator+ 实现:http: //www.johndcook.com/skewness_kurtosis.html(减去偏度和峰度细节,为此我没有用)。减法可以由此得出。
问题是:我如何维护这些子集?还是我应该尝试另一种技术?