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

如何有效地计算一系列非常大的数字的均值和标准差?,第1张

概述如何有效地计算一系列非常大的数字的均值和标准差

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

我也需要打印数字到一个文件。

如何计算标准偏差[数组]的答案不能帮助。

任何帮助,将不胜感激 !

无法执行“XMLhttpRequest”上的“打开”:无效的URL

运行时错误:无法读取未定义的属性“推”

最好

万数不算什么 几百万就足以让你想起记忆,但是可能还不足以让你把所有的记忆都记下来。

如果你达到数十亿,万亿甚至更多,那么你到了可能无法把它们拉回到记忆的地步。 看起来你还没到那个地步。

你可以把它们全部放入一个List ,不需要担心。

话虽如此,liNQ的Average方法实际上并不需要急切地加载所有数字来计算平均值; 它可以使用“当前”项修改一个聚合值,然后丢弃它,所以它的内存占用非常低。 在问题中链接到的所有StdDev方法都可以这样说; 他们都有一个小的不断的内存足迹。

所以你所要做的就是创建一个IEnumerable<double> ,它表示从文件中延伸出来的数字序列,然后你可以调用这些方法。 没有必要急于将它们加载到内存中。

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

初始化Count , Sum和SumOfSquares为零。

当您收到每个号码时,请将一个号码添加到Count ,将该号码添加到Sum ,然后将该号码的平方加到SumOfSquares 。

当您处理Math.Sqrt(SumOfSquares / Count - Mean * Mean)每个数字后,将Mean设置为Sum / Count ,并将StandardDeviation设置为Math.Sqrt(SumOfSquares / Count - Mean * Mean) 。

后一个公式的推导显示在维基百科页面上,用于标准偏差 。

100万个数字(32位整数)需要大约4MB的内存,这是很小的。

只需将它们全部加载到int列表中,然后就可以使用内置的linq方法对它们进行 *** 作。

更新:如何使用linq进行 *** 作:

与linq的数学统计

总结

以上是内存溢出为你收集整理的如何有效地计算一系列非常大的数字的均值和标准差?全部内容,希望文章能够帮你解决如何有效地计算一系列非常大的数字的均值和标准差?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1274617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存