如何有效地生成具有大量箱和数据的直方图

时间:2019-02-08 18:08:37

标签: python jupyter-notebook histogram

请我看看中心极限理论如何适用于均匀分布的随机数。对于问题的第一部分,我被要求创建1,000,000个垃圾箱,每个垃圾箱中有一个数字,然后每个垃圾箱中有2、3和10个数字。

我使用NumPy包创建直方图,但是尝试创建1,000,000个bin,每个bin中有一个数字将花费大量时间。虽然我能够创建1000个和10,000个垃圾箱以及随机数的直方图,所以我认为numpy.hist并不是处理大量垃圾箱的有效方法。

是否还有其他方法可以创建包含大量数据和箱的直方图?

编辑:随机数在[0,1]区间内。

1 个答案:

答案 0 :(得分:1)

您遗漏了可能至关重要的细节。

您的bin大小是多少(即[0,1]之间,[0,20]之间或[0,1M]之间有1M个bin)?您对性能的要求是什么?对您而言,“缓慢”是什么?您是否正在达到内存限制,CPU使用限制或其他目的?

一个简单的解决方案是使用random.random()生成一个介于[0,1]之间的随机数,然后对它进行乘法/加法以在所需的任何时间间隔进行采样。

以下代码对1M个bin进行采样,每个bin大小为1,每个bin包含2个数字。

import random

hist_data = []
in_each_bin = 2

for i in range(1000000):
        for j in range(in_each_bin):
                hist_data.append(i+random.random())

print(len(hist_data))
print(hist_data[0:20])

它在我的中型计算机上运行不到3秒。

$ time python3 pytest.py
2000000
[0.9271533001749838, 0.6759096885597532, 1.0950935186564377, 1.4195955772696995, 2.620307487968376, 2.535700184898931, 3.606823695579621, 3.5471311130365346, 4.01255833303964, 4.013715023517034, 5.42988725471679, 5.257435390135351, 6.681956593279519, 6.686189487682324, 7.916591795688389, 7.598478524938438, 8.309152266029844, 8.997231092516385, 9.801082205541228, 9.198095437802664]

real    0m3.418s
user    0m2.547s
sys     0m0.500s

符合您的需求和要求吗?