Generate random array of 0 and 1 with a specific ratio

后端 未结 4 2092
孤城傲影
孤城傲影 2021-02-19 06:09

I want to generate a random array of size N which only contains 0 and 1, I want my array to have some ratio between 0 and 1. For example, 90% of the array be 1 and the remainin

相关标签:
4条回答
  • 2021-02-19 06:16

    You could use a binomial distribution:

    np.random.binomial(n=1, p=0.9, size=[1000])
    
    0 讨论(0)
  • 2021-02-19 06:26

    If you want an exact 1:9 ratio:

    nums = numpy.ones(1000)
    nums[:100] = 0
    numpy.random.shuffle(nums)
    

    If you want independent 10% probabilities:

    nums = numpy.random.choice([0, 1], size=1000, p=[.1, .9])
    

    or

    nums = (numpy.random.rand(1000) > 0.1).astype(int)
    
    0 讨论(0)
  • 2021-02-19 06:38

    Without using numpy, you could do as follows:

    import random
    percent = 90
    
    nums = percent * [1] + (100 - percent) * [0]
    random.shuffle(nums)
    
    0 讨论(0)
  • 2021-02-19 06:41

    Its difficult to get an exact count but you can get approximate answer by assuming that random.random returns a uniform distribution. This is strictly not the case, but is only approximately true. If you have a truly uniform distribution then it is possible. You can try something like the following:

    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
    

    Hope this helps ...

    0 讨论(0)
提交回复
热议问题