繁体   English   中英

如何生成长度为 N 的随机二进制数 0 或 1,并可以选择控制出现 0 或 1 的概率?

[英]How to generate random binary numbers 0 or 1 with length of N and with option to control the probability of having 0 or 1?

我想生成长度为 N 的随机二进制数(0 或 1)。 棘手的部分是,它应该能够控制拥有更多 1 或 0 的概率。例如,我想要总共 100 个随机数,其中 0 的概率为 40%,1 的概率为 60%。 请帮忙。

控制这种分布的一般解决方案如下:

首先生成一个 0-100 之间的统一随机数(或 0-1000 以获得更多控制,即如果您需要 60.1% 的机会获得一个数字)

然后如果数字小于或等于 60,分配 1,现在你有 60% 的机会分配 1。

我希望这会有所帮助,我想你会弄明白的。

您始终可以存储 0 和 1 的计数。 在这里,由于您总共需要 100 个随机数,其中 0 的概率为 40%,1 的概率为 60%,因此让我们初始化 count_0=40、count_1=60、total_count=100。 现在您可以生成一个介于 0 和 100 之间的随机数。

让我们假设第一个随机生成的数字恰好是 35。由于 35 小于 40,因此第一个结果恰好是 0。递减 count_0。 减少 total_count。 现在,对于下一个随机数,请选择一个介于 0 和 99(total_count)之间的随机生成的数字。 这次如果随机生成的数字小于或等于 count_0(等于 39),则将结果设置为 0,否则为 1。

按照此过程进行 100 次迭代以生成 100 个随机 0 和 1。 这种方法不使用额外的空间和 O(n) 时间复杂度,其中 n 是要生成的 0 和 1 的数量。

在 Python:

prob = 0.6 #p = prob of having 1
n_samples = np.random.choice([0,1], size=N, p=[prob, 1-prob]) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM