简体   繁体   中英

How Do I create a Binomial Array of specific size

I am trying to generate a numpy array of length 100 randomly filled with sets of 5 1s and 0s as such:

    [ [1,1,1,1,1] , [0,0,0,0,0] , [0,0,0,0,0] ... [1,1,1,1,1], [0,0,0,0,0] ]

Essentially there should be a 50% chance that at each position there will be 5 1s and a 50% chance there will be 5 0's

Currently, I have been messing about with numpy.random.binomial(), and tried running:

    numpy.random.binomial(1, .5 , (100,5))

but this creates an array as such:

    [ [0,1,0,0,1] , [0,1,1,1,0] , [1,1,0,0,1] ... ]

I need each each set of elements to be consistent and not random. How can I do this?

Use numpy.random.randint to generate a random column of 100 1s and 0s, then use tile to repeat the column 5 times:

>>> numpy.tile(numpy.random.randint(0, 2, size=(100, 1)), 5)
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1],
       [0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [0, 0, 0, 0, 0],
...

You want to create a temporary array of zeros and ones, and then randomly index into that array to create a new array. In the code below, the first line creates an array whose 0'th row contains all zeros and whose 1st row contains all ones. The function randint returns a random sequence of zeros and ones, which can be used as indices into the temporary array.

import numpy as np
...
def make_coded_array(n, k=5):
    _ = np.array([[0]*k,[1]*k])
    return _[np.random.randint(2, size=500)]

Use numpy.ones and numpy.random.binomial

>>> numpy.ones((100, 5), dtype=numpy.int64) *  numpy.random.binomial(1, .5, (100, 1))
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
...
import numpy as np
import random

c = random.sample([[0,0,0,0,0],[1,1,1,1,1]], 1)
for i in range(99):
    c = np.append(c, random.sample([[0,0,0,0,0],[1,1,1,1,1]], 1))

Not the most efficient way though

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM