簡體   English   中英

Randint並不總是遵循統一分布

[英]Randint doesn't always follow uniform distribution

我正在玩Python中的隨機庫來模擬我工作的項目,我發現自己處於一個非常奇怪的位置。

假設我們在Python中有以下代碼:

from random import randint
import seaborn as sns

a = []
for i in range(1000000):
    a.append(randint(1,150))

sns.distplot(a)

該圖遵循“離散均勻”分布。

范圍在1和150之間

但是,當我將范圍從1更改為110時,繪圖有幾個峰值。

from random import randint
import seaborn as sns

a = []
for i in range(1000000):
    a.append(randint(1,110))

sns.distplot(a)

范圍從1到110

我的印象是,峰值在0,10,20,30,...但我無法解釋它。

編輯:問題與提議的問題並不相似,因為我的案例中的問題是seaborn庫和我可視化數據的方式。

編輯2:根據對答案的建議,我嘗試通過更改seaborn庫來驗證它。 相反,使用matplotlib兩個圖都是相同的

from random import randint
import matplotlib.pyplot as plt

a = []
for i in range(1000000):
    a.append(randint(1,110))

plt.hist(a) 

來自matplotlib

問題似乎出現在你的seabornseaborn ,而不是在randint()

根據我的統計,你的seaborn分布圖中有50個箱子。 似乎seaborn實際上是在這些垃圾箱中對你返回的randint()值進行分類,並且沒有辦法將110個值均勻分布到50個垃圾箱中。 因此,您可以獲得三個值放入bin中的峰值,而不是其他二進制值的通常兩個值。 您的峰值確認了這一點:它們比其他條形圖高50%,正如預期的3個分檔值而不是2個。

另一種檢查方法是強制seaborn使用55個箱子來獲得這110個值(或者可能是10個箱子或110個其他除數)。 如果你仍然得到了峰值,那么你應該擔心randint()

為了增加@RoryDaulton的優秀答案,我運行了randint(1:110) ,生成頻率計數並將其轉換為R randint(1:110) ,如下所示:

hits = {i:0 for i in range(1,111)}
for i in range(1000000): hits[randint(1,110)] += 1
hits = [hits[i] for i in range(1,111)]
s = 'c('+','.join(str(x) for x in hits)+')'
print(s)

c(9123,9067,9124,8898,9193,9077,9155,9042,9112,9015,8949,9139,9064,9152,8848,9167,9077,9122,9025,9159,9109,9015,9265,9026,9115,9169,9110,9364,9042,9238,9079,9032,9134,9186,9085,9196,9217,9195,9027,9003,9190,9159,9006,9069,9222,9205,8952,9106,9041,9019,8999,9085,9054,9119,9114,9085,9123,8951,9023,9292,8900,9064,9046,9054,9034,9088,9002,8780,9098,9157,9130,9084,9097,8990,9194,9019,9046,9087,9100,9017,9203,9182,9165,9113,9041,9138,9162,9024,9133,9159,9197,9168,9105,9146,8991,9045,9155,8986,9091,9000,9077,9117,9134,9143,9067,9168,9047,9166,9017,8944)

然后我將其粘貼到R控制台,重建觀察結果並在結果上使用R的hist() ,獲得此直方圖(具有疊加的密度曲線):

在此輸入圖像描述

如您所見,這證實您觀察到的問題無法追溯到randint但卻是sns.displot()的工件。

暫無
暫無

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

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