在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的数学统计
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。