Простым способом сделать это было бы сначала сгенерировать ndarray
с пропорцией нулей и единиц, которую вы хотите:
>>> import numpy as np
>>> N = 100
>>> K = 30 # K zeros, N-K ones
>>> arr = np.array([0] * K + [1] * (N-K))
>>> arr
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1])
Затем вы можете просто shuffle
массив, сделав распределение случайным:
>>> np.random.shuffle(arr)
>>> arr
array([1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0,
1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1,
1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1,
1, 1, 1, 0, 1, 1, 1, 1])
Обратите внимание, что этот подход даст вам точную пропорцию нулей/единиц, которые вы запрашиваете, в отличие, скажем, от биномиального подхода. Если вам не нужна точная пропорция, то подойдет биномиальный подход.
person
mdml
schedule
25.10.2013
size
не делится на 3? Исключение? Круглый/пол/корпус? Взвешенный случайный раунд (таким образом, 10 имеет шанс 2/3 на 3 и шанс 1/3 на 4)? - person abarnert   schedule 25.10.2013frac
просто используйтеp=[1-frac, frac]
. - person Warren Weckesser   schedule 26.10.2013