存储概率分布而不保存单个值
Storing a probability distribution without saving single values
我在一次运算中计算了很多(约 1 亿个)浮点值。我不想将它们全部存储在内存中,但我想保存集合的粗略分布。
我的想法是确定所有值的指数并将它们计算在直方图中。但是,当然,这仅在值具有不同指数时才有效。
有人知道我如何在不知道分布情况的情况下做到这一点吗?
我建议随机保存一些,然后在事后制作直方图。例如,如果你随机保存 0.1% 的数字,那么你只需要保存 100,000,从中你可以计算出一个高度准确的分布。
您可以减少调用 rand() 的次数,方法是每次保存一个数字时调用它以找到 1..2000
范围内的随机数,然后等待那么多数字再保存下一个。
如果您大致知道最小值和最大值,我认为分箱策略将是一个不错的选择。这是我的意思的概述:
算出你需要多少个垃圾桶
对于我所有的号码
找到这个号码所在的垃圾箱
增加 bin
另一个有用的替代方法是计算分布的动态矩,然后从矩重建 PDF
https://en.wikipedia.org/wiki/Method_of_moments_(statistics)
https://www.wias-berlin.de/people/john/ELECTRONIC_PAPERS/JAOT07.CES.pdf
我在一次运算中计算了很多(约 1 亿个)浮点值。我不想将它们全部存储在内存中,但我想保存集合的粗略分布。
我的想法是确定所有值的指数并将它们计算在直方图中。但是,当然,这仅在值具有不同指数时才有效。
有人知道我如何在不知道分布情况的情况下做到这一点吗?
我建议随机保存一些,然后在事后制作直方图。例如,如果你随机保存 0.1% 的数字,那么你只需要保存 100,000,从中你可以计算出一个高度准确的分布。
您可以减少调用 rand() 的次数,方法是每次保存一个数字时调用它以找到 1..2000
范围内的随机数,然后等待那么多数字再保存下一个。
如果您大致知道最小值和最大值,我认为分箱策略将是一个不错的选择。这是我的意思的概述:
算出你需要多少个垃圾桶 对于我所有的号码 找到这个号码所在的垃圾箱 增加 bin
另一个有用的替代方法是计算分布的动态矩,然后从矩重建 PDF
https://en.wikipedia.org/wiki/Method_of_moments_(statistics)
https://www.wias-berlin.de/people/john/ELECTRONIC_PAPERS/JAOT07.CES.pdf