簡體   English   中英

np.random.choice 在直方圖中有間隙

[英]np.random.choice has a gap in histogram

我正在使用 np.random.choice 來構建投擲 2 個均勻加權骰子之和的直方圖。 但是,當我運行代碼時,應該有最多回報的 7 的值丟失了。

import numpy as np
import matplotlib.pyplot as plt

values = [1, 2, 3, 4, 5, 6]
z = 1/6
x = np.random.choice(values, 1000000, p=[z, z, z, z, z, z])
y = np.random.choice(values, 1000000, p=[z, z, z, z, z, z])

plt.hist(x + y, 12, color="green", edgecolor='black', linewidth=1.2, label="Uniform Dist", rwidth=.75)
plt.show()

np.random.choice:2個骰子的總和

關於出了什么問題的任何建議?

區間6.167 <= x < 7.0中沒有值。 數字7包含在區間7.0 <= x < 7.833中。

我建議 plot 一個酒吧 plot 的離散頻率。

plt.bar(*np.unique(x+y, return_counts=True))

在此處輸入圖像描述

問題是plt.hist分箱算法適用於實際值,而不適用於integer (離散)值。

解釋

讓我們看看 matplotlib 提出的 bin:

n, bins, _ = plt.hist(x + y, bb, color="green", edgecolor='black', linewidth=1.2, label="Uniform Dist", rwidth=.75)

bins是:

array([ 2.        ,  2.83333333,  3.66666667,  4.5       ,  5.33333333,
        6.16666667,  7.        ,  7.83333333,  8.66666667,  9.5       ,
       10.33333333, 11.16666667, 12.        ])

第六個柱的范圍[bins[5], bins[6])等於[6.17, 7.00) - 注意,它是半開的。 因此沒有integer 屬於這個范圍。

解決方案

解決方案是手動設置垃圾箱:

values = x + y
bins = np.arange(np.min(values) - .5, np.max(values) + 0.5, 1)

plt.hist(values, bins, color="green", edgecolor='black', linewidth=1.2, label="Uniform Dist", rwidth=.75)

bins等於array([0.5, 1.5, 2.5, 3.5, 4.5, 5.5, ..., 10.5, 11.5, 12.5])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM