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

1 投票
4 回答
1398 浏览
提问于 2025-04-17 22:37

我想生成一个长度为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

你想要创建一个临时的数组,这个数组里面有零和一,然后随机选择这个数组中的元素来生成一个新数组。在下面的代码中,第一行创建了一个数组,数组的第0行全是零,第1行全是1。函数 randint 会返回一个随机的零和一的序列,这个序列可以用来作为临时数组的索引。

import numpy as np
...
def make_coded_array(n, k=5):
    _ = np.array([[0]*k,[1]*k])
    return _[np.random.randint(2, size=500)]
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],
...
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))

不过这不是最有效的方法。

3

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

撰写回答