python - 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))
比5
或 更1
频繁10
。
我更喜欢的是,在 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 位的机会高得多吗?
解决方案
像这样的东西:
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] (含)内,然后那些被选中的位将均匀分布在整个列表中。
推荐阅读
- c - 如何调试内核日志?
- sql - 为什么 SQL Server 不允许我启用混合身份验证模式,以便我可以使用 sa 用户将角色分配给其他用户?
- python - 用于自定义数据悬停在 plotly lib 中的 Python_Function
- c - Windows 10:“不允许使用与号 () 字符”
- java - 即使添加了 Junit 库,也没有发现测试运行器 JUnit 5 的测试
- r - R / PLM 包:如何为不同国家/地区的相同品牌包含嵌套效应?
- java - 将文件传递到 jar
- machine-learning - How to use custom metrics in Keras model while using Grid Search CV?
- html - 单击 TR 元素中的复选框
- python - 如何使用 python -c 将多个值传递给 C 程序