生成具有特定比率的0和1的随机数组

问题描述 投票:11回答:3

我想生成大小为N的随机数组,其中只包含0和1,但我希望我的数组在0和1之间有一些比例。例如,90%的数组为1,剩下的10%为0(但我希望这个90%沿整个阵列是随机的)。

现在我有:

randomLabel = np.random.randint(2, size=numbers)

但我无法控制0和1之间的比例。

python random numpy
3个回答
26
投票

如果你想要一个精确的1:9比例:

nums = numpy.ones(1000)
nums[:100] = 0
numpy.random.shuffle(nums)

如果您想要独立的10%概率:

nums = numpy.random.choice([0, 1], size=1000, p=[.1, .9])

要么

nums = (numpy.random.rand(1000) > 0.1).astype(int)

0
投票

很难得到准确的计数,但你可以通过假设random.random返回统一分布得到近似答案。严格来说并非如此,但只是大致如此。如果你有一个真正统一的分布,那么它是可能的。您可以尝试以下内容:

In [33]: p = random.random(10000)
In [34]: p[p <= 0.1] = 0
In [35]: p[p > 0] = 1
In [36]: sum(p == 0)
Out[36]: 997
In [37]: sum(p == 1)
Out[37]: 9003

希望这可以帮助 ...


0
投票

不使用numpy,你可以这样做:

import random
percent = 90

nums = percent * [1] + (100 - percent) * [0]
random.shuffle(nums)
© www.soinside.com 2019 - 2024. All rights reserved.