如何创建特定大小的二项式数组

时间:2014-03-17 05:14:34

标签: python arrays random numpy

我正在尝试生成一个长度为100的numpy数组,随机填充5个1和0的集合:

    [ [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] ]

基本上应该有50%的几率在每个位置有5个1和50%的几率将有5个0

目前,我一直在搞乱numpy.random.binomial(),并尝试运行:

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

但这会创建一个数组:

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

我需要每组元素都是一致的而不是随机的。我怎么能这样做?

4 个答案:

答案 0 :(得分:2)

使用numpy.random.randint生成100个1和0的随机列,然后使用tile重复列5次:

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

答案 1 :(得分:0)

您想要创建一个零和一的临时数组,然后随机索引到该数组以创建一个新数组。在下面的代码中,第一行创建一个数组,其第0行包含全零,第一行包含所有1。函数randint返回一个0和1的随机序列,可用作临时数组的索引。

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

答案 2 :(得分:0)

使用numpy.onesnumpy.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],
...

答案 3 :(得分:0)

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

不是最有效的方式

相关问题