如何创建特定大小的二项数组
我想生成一个长度为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.ones
和 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],
...
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],
...