在numpy中numpy.histogram /随机数的奇怪行为?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在numpy中numpy.histogram /随机数的奇怪行为?相关的知识,希望对你有一定的参考价值。

我在Python中偶然发现了随机数的一些特殊行为,特别是我使用模块numpy.random。

请考虑以下表达式:

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正态分布。然而,典型的输出看起来像这样:

阵列([ 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,10,10,014,0,102,0,92,0, 55,0,46,0,35,0,10,0,9,0,4, 0,0,0,3,0,1,1 ])

根据上面的陈述,我无法解释直方图中零点的出现 - 我在这里遗漏了一些明显的东西吗?

答案

你使用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])

以上是关于在numpy中numpy.histogram /随机数的奇怪行为?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 matplotlib 直方图中选择 bin

从matplotlib colorbar中挑选情节颜色?

这个 numpy 赋值中尾随逗号的作用是啥?

从numpy数组中选择两个随机行

python 读取大文本文件并存入numpy时过于费时的问题及猜测

python基础2:随机数生成—random模块、numpy中的random函数