如何有效计算一大系列数字的均值和标准差?

use*_*472 2 c# windows math mean visual-studio

通过Win 7中Visual Studio中的C#,我需要计算一大系列数字的均值和标准差.这些数字是从文件中读取的.可能有十万甚至更多的数字.如果我不想将它们保存在数组或列表等数据结构中,因为这可能不是内存效率,如何有效地进行计算.

我还需要将数字打印到文件中.

如何计算标准偏差[数组]的答案 无济于事.

任何帮助,将不胜感激 !

最好

Eri*_*hil 6

要一次处理一个数字时计算平均值和标准差:

Count将、Sum、 和初始化SumOfSquares为零。

当您收到每个数字时,将 1 添加到Count,将数字添加到Sum,然后将数字的平方添加到SumOfSquares

处理完每个数字后,设置MeanSum / Count,然后设置StandardDeviationMath.Sqrt(SumOfSquares / Count - Mean * Mean)

维基百科标准差页面显示了后一个公式的推导。


Ser*_*rvy 5

一万个数字是没有的.几百万就足以让你考虑内存,但可能还不足以让你把它们全部留在内存中.

如果你达到数十亿,数万亿甚至更多,那么你就可能无法将它们拉入记忆中.看起来你似乎还没到那一点.

你可以把它们全部拉进去List,不需要担心.

话虽如此,AverageLINQ 的方法实际上并不需要急切地加载所有数字来计算平均值; 它只能使用"当前"项修改聚合值,然后将其丢弃,因此其内存占用量非常低.您在问题中链接到的所有StdDev方法都可以这样说; 它们都有一个小的恒定内存占用.

所以你需要做的就是创建一个IEnumerable<double>代表你文件中一个延迟填充的数字序列,你可以在它上面调用这些方法.没有必要急切地将它们加载到内存中.