numpy直方图和numpy中的随机数的奇怪行为?

2024-04-16 09:53:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我偶然发现了Python中随机数的一些特殊行为,特别是我使用的模块随机数. 你知道吗

考虑以下表达式:

n = 50
N = 1000
np.histogram(np.sum(np.random.randint(0, 2, size=(n, N)), axis=0), bins=n+1)[0]

在大N的极限下,我期望二项分布(对于感兴趣的读者,这模拟了Ehrenfest model),而对于大n,则期望正态分布。但是,典型的输出如下所示:

array([
1, 0, 0, 1, 0, 2, 0, 1, 0, 15, 0,
12, 0, 18, 0, 39, 0, 64, 0, 62, 0, 109,
0, 97, 0, 107, 0, 114, 0, 102, 0, 92, 0,
55, 0, 46, 0, 35, 0, 10, 0, 9, 0, 4,
0, 0, 0, 3, 0, 1, 1
])

根据上面的陈述,我无法解释直方图中零的出现——我是否遗漏了一些明显的东西?你知道吗


Tags: 模块sizemodel表达式nprandom感兴趣histogram
1条回答
网友
1楼 · 发布于 2024-04-16 09:53:00

你用错了histogram。垃圾箱不是你想象的那样。它们不是从0到50;而是从最小输入值到最大输入值。0表示完全位于两个整数之间的容器。你知道吗

numpy.bincount试试:

In [31]: n = 50

In [32]: N = 5000

In [33]: np.bincount(np.sum(np.random.randint(0, 2, size=(n, N)), axis=0))
Out[33]: 
array([  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
         0,   7,  13,  22,  46,  75, 126, 220, 305, 367, 461, 550, 578,
       517, 471, 438, 314, 189, 146,  76,  50,  17,   9,   2,   1])

相关问题 更多 >