[英]Random.choices not returning uniform distribution
我正在嘗試使用 random.choices 模擬離散值的均勻分布。 每次生成新集合時,表示唯一計數的鍵都會遞增。
為什么統一結果([2,2])
發生的可能性低於[1,3]
?
def sim_counts(size, values=[1,-1], popsize=2):
count_dict = {}
for i in range(popsize):
X = random.choices(values,k=size)
_, counts = np.unique(X, return_counts=True)
if len(counts) == 1:
counts = [0,counts[0]]
key = str(np.sort(counts))
if key not in count_dict:
count_dict[key] = 0
count_dict[key] +=1
else:
count_dict[key] +=1
return count_dict
sim_counts(4, values=[1,-1], popsize=10000)
>>> {'[2 2]': 3747, '[0 4]': 1319, '[1 3]': 4934}
這實際上是一個數學問題,而不是編程。
以下是產生[3 1]
計數的所有排列:
[1, 1, 1, -1]
[1, 1, -1, 1]
[1, -1, 1, 1]
[-1, 1, 1, 1]
[-1, -1, -1, 1]
[-1, -1, 1, -1]
[-1, 1, -1, -1]
[1, -1, -1, -1]
以下是所有[2 2]
排列:
[1, 1, -1, -1]
[1, -1, 1, -1]
[-1, 1, 1, -1]
[1, -1, -1, 1]
[-1, 1, -1, 1]
[-1, -1, 1, 1]
所以比例是 8:6,這是你的結果的大致比例。
作為代碼整潔的一部分,您正在設置key = str(numpy.sort(counts))
,這隱藏了使用該策略獲取[1 3]
鍵的兩種方法。
如果您在沒有排序的情況下再次運行測試,我認為您會發現結果[2 2]
比您預期的更常見,但是[1 3]
和[3 1]
的結果雖然單獨較少,但組合的數量更大.
例如:
{'[3 1]': 2521, '[1 3]': 2550, '[2 2]': 3721, '[0, 4]': 1208}
另請參閱@barmar 的答案,以更細致地了解導致相關鍵的各個排列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.