如何生成长度为 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 else 1.

按照此过程进行 100 次迭代以生成 100 个随机 0 和 1。这种方法不使用额外的 space 和 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])