如何生成长度为N的随机二进制数0或1,并可选择控制出现0或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]) 

相关内容

  • 没有找到相关文章

最新更新