Binary random array with a specific proportion of ones?

arrays, numpy, python, random

Solution

If I understand your problem correctly, you might get some help with numpy.random.shuffle

>>> def rand_bin_array(K, N):
    arr = np.zeros(N)
    arr[:K]  = 1
    np.random.shuffle(arr)
    return arr

>>> rand_bin_array(5,15)
array([ 0.,  1.,  0.,  1.,  1.,  1.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,
        0.,  0.])

Problem

What is the efficient(probably vectorized with Matlab terminology) way to generate random number of zeros and ones with a specific proportion? Specially with Numpy? As my case is special for `1/3`, my code is: ``` import numpy as np a=np.mod(np.multiply(np.random.randomintegers(0,2,size)),3) ``` But is there any built-in function that could handle this more effeciently at least for the situation of `K/N` where K and N are natural numbers?

Original source