Binary random array with a specific proportion of ones?

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 

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?


  • 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
        return arr
    >>> rand_bin_array(5,15)
    array([ 0.,  1.,  0.,  1.,  1.,  1.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,
            0.,  0.])