Создать случайный массив из 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)