随机选择不返回均匀分布



我正在尝试使用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}

作为代码整理的一部分,您正在设置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的回答,以更细致地了解导致问题密钥的各个排列。

这实际上更像是一个数学问题,而不是编程问题。

以下是产生[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,这是你的结果的近似比例。

最新更新