Создать случайный массив из 0 и 1 с определенным соотношением
Я хочу сгенерировать случайный массив размером N, который содержит только 0 и 1, но я хочу, чтобы у моего массива было некоторое соотношение между 0 и 1. Например, 90% массива будет 1, а оставшиеся 10% будут 0 (но я хочу это 90% быть случайным по всему массиву).
сейчас у меня есть:
randomLabel = np.random.randint(2, size=numbers)
Но я не могу контролировать соотношение между 0 и 1.
Ответы
Ответ 1
Если вам требуется точное соотношение 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)
Ответ 2
Трудно получить точное количество, но вы можете получить приблизительный ответ, предположив, что 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
Надеюсь, что это поможет...
Ответ 3
Не используя numpy, вы можете сделать следующее:
import random
percent = 90
nums = percent * [1] + (100 - percent) * [0]
random.shuffle(nums)