我正在尝试生成一个长度为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] ... ]
我需要每组元素都是一致的而不是随机的。我怎么能这样做?
答案 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.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],
...
答案 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))
不是最有效的方式