2017-12-13 7 views
0

私はPythonで乱数のいくつかの特殊な振る舞いを見つけました。特にnumpy.randomというモジュールを使用しました。私は二項分布を期待(興味のある読者のために、これはEhrenfest modelをシミュレート)および大n正規分布のためであろう大Nの限界でnumpyのnumpy.histogram/random numbersの奇妙な振る舞いは?

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

は、以下の式を考えます。典型的な出力は、しかし、次のようになります

アレイ([
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
])

上記の文で、私は説明できませんヒストグラムのゼロの出現 - 私はここで何かを見逃していますか?

答えて

5

histogramが間違っています。ビンは、あなたがどこにいると思うかではありません。彼らは0から50までは行きません。最小入力値から最大入力値になります。 0は、完全に2つの整数の間にあるビンを表します。

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]) 
+0

ああ、私はそれを逃した - おかげでたくさん! – rammelmueller

+0

完全性のために: 'minlength = n + 1'を' np.bincount'に渡してスパン全体にわたってリストを得るとき、望ましい振る舞いが達成されます。 – rammelmueller