2014-02-05 2 views
6

Я хочу создать случайный массив размера N, который содержит только 0 и 1, но я хочу, чтобы мой массив имел некоторое соотношение между 0 и 1. Например, 90% из массива будет 1, а остальные 10% равны 0 (но я хочу, чтобы этот 90% был случайным по всему массиву).Генерировать случайный массив из 0 и 1 с определенным отношением (python, numpy)

прямо сейчас у меня есть:

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

Но я не могу контролировать соотношение между 0 и 1.

+0

Вы хотите точное соотношение 1: 9, или вы хотите, чтобы каждая ячейка имела независимую вероятность 10% быть 0? – user2357112

+0

оба произведения для меня, я думаю – Am1rr3zA

+0

Дубликат: http://stackoverflow.com/questions/19597473/binary-random-array-with-a-specific-proportion-of-ones/ –

ответ

17

Если вы хотите точное соотношение 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 

Надеется, что это помогает ...

Смежные вопросы