python random binary list,均匀分布

时间:2018-05-30 19:08:58

标签: python random bell-curve

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

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))大约5的频率大于110 }。

我更喜欢的是,将10位打开10位与打开其中一半的可能性相同。打开的位数应均匀分布。

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

编辑:

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

>>> 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比特的可能性?

1 个答案:

答案 0 :(得分:4)

这样的事情:

page ion-item.item {
  color: red;
}
page ion-item.item[margin-bottom] {
  margin-bottom: 1em;
}
page ion-item.item ion-avatar {
  font-weight: bold;
}

“on”的位数应均匀分布在[0,n]中,然后选择的那些位将在整个列表中均匀分布。