簡體   English   中英

Random.choices 不返回均勻分布

[英]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.

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