pythonarraysnumpyrandom

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 
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?


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.])