c# - 如何在大量数字中找到平均值?

标签 c# math memory

我有大量数字,可能在数 GB 范围内。第一个问题是我无法将所有这些都存储在内存中。其次是任何添加这些的尝试都会导致溢出。我正在考虑使用更多的滚动平均值,但它需要准确。有什么想法吗?

这些都是 float 。

这不是从数据库中读取的,它是从多个来源收集的 CSV 文件。它必须是准确的,因为它存储为秒的一部分(例如 0.293482888929),并且滚动平均值可能是 0.2 和 0.3 之间的差异

它是一组#,表示用户响应某些表单操作所花费的时间。例如,当显示一个消息框时,他们按 OK 或 Cancel 花了多长时间。发送给我的数据存储为 seconds.portions of a second;例如 1.2347 秒。将其转换为毫秒,我会很快溢出 int、long 等。即使我不转换它,我仍然会很快溢出它。我想下面的一个答案是正确的,也许我不必 100% 准确,只需在特定的 StdDev 内的某个范围内查看,我就足够接近了。

最佳答案

您可以从您的集合(“population”)中随机抽样以获得平均值(“mean”)。准确性将取决于您的样本变化量(由“standard deviation”或方差确定)。

优势在于您拥有数十亿个观察值,您只需对其中的一小部分进行采样即可获得不错的准确度或您选择的“confidence range”。如果条件合适,这会减少您将要做的工作量。

这是 numerical library对于包含随机序列生成器的 C#。只需创建一个随机数字序列来引用您的元素数组中的索引(从 1 到 x,您的数组中的元素数)。取消引用以获取值,然后计算您的平均值和标准差。

如果您想测试数据的分布,请考虑使用 Chi-Squared Fit测试或 K-S测试,您可以在许多电子表格和统计包中找到它(例如,R)。这将有助于确认这种方法是否可用。

关于c# - 如何在大量数字中找到平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/895396/

相关文章:

c - 将结构成员指针分配给另一个动态内存分配指针是否安全?

c# - "Hot Track"对 Windows 窗体用户控件的影响

c# - 如何在 C# 中验证 CSV?

java - Math.round在android中给出一个十进制数

python - 在 scipy 中整合多维积分

python - 尝试将 R 对象文件加载到 python numpy 数组中时出现内存错误

c# - 如何获得 MIDI 事件的准确时间

c# - 删除字符串中的特殊字符和无效字符

java - 旋转偏移坐标

java - 在 Java(或 Scala)中迭代 HashMap 的 HashMap