python随机二进制列表,均匀分布

2024-04-26 14:30:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个代码,可以生成任意长度的二进制列表,打开一个随机数的位:

rand_binary_list = lambda n: [random.randint(0,1) for b in range(1,n+1)]
rand_binary_list(10)

返回如下内容:

[0,1,1,0,1,0,1,0,0,0]

如果你运行它一百万次,你会得到一个钟形曲线分布,其中sum(rand_binary_list(10))110更经常地是5。你知道吗

我更喜欢的是,10位中有1位被打开的可能性与一半被打开的可能性相同。开启的位数应均匀分布。你知道吗

我不知道如何在不影响随机性完整性的情况下做到这一点。有什么想法吗?你知道吗

编辑:

我想明确地展示这个钟形曲线现象,所以这里是:

>>> import random
>>> rand_binary_list = lambda n: [random.randint(0,1) for b in range(1,n+1)]
>>> counts = {0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0}
>>> for i in range(10000):
...     x = sum(rand_binary_list(10))
...     counts[x] = counts[x] + 1
...
>>> counts[0]
7
>>> counts[1]
89
>>> counts[2]
454
>>> counts[3]
1217
>>> counts[4]
2017
>>> counts[5]
2465
>>> counts[6]
1995
>>> counts[7]
1183
>>> counts[8]
460
>>> counts[9]
107
>>> counts[10]
6

看到了吗,打开5位的几率比打开1位的几率高得多?你知道吗


Tags: lambda代码inforrangerandom可能性曲线
1条回答
网友
1楼 · 发布于 2024-04-26 14:30:12

像这样:

def randbitlist(n=10):
    n_on = random.randint(0, n)
    n_off = n - n_on
    result = [1]*n_on + [0]*n_off
    random.shuffle(result)
    return result

位“on”的数量应均匀分布在[0,n]中(包括0,n),然后所选的位将均匀分布在整个列表中。你知道吗

相关问题 更多 >