我需要一个布尔或二进制numpy数组大小(m,m)
n
真值随机散布。我试图制作一个随机网格模式。我将有一个5x5
数组,其中包含3
真值,并且仅在这些点进行采样
使用random.choice我有时会获得或多于3
所需的True值。
for x in range(0,25):
x = np.random.choice([True,False], p=[0.15,0.85])
答案 0 :(得分:3)
您可以将np.random.choice
与可选参数replace
设置为False
,以使unique random
到{{strong> 0
ID可以使用linear indexing
使用np.put
将m*m-1
初始化ones
数组设置为zeros
{1}}。因此,实现看起来像这样 -
2D
示例运行 -
m = 5; n = 3;
out = np.zeros((m,m),dtype=bool)
np.put(out,np.random.choice(range(m*m), n, replace=False),1)
由于这是In [54]: m = 5; n = 3;
...: out = np.zeros((m,m),dtype=bool)
...: np.put(out,np.random.choice(range(m*m), n, replace=False),1)
...:
In [55]: out
Out[55]:
array([[False, False, False, False, False],
[False, False, False, False, False],
[False, True, True, False, False],
[False, False, False, False, False],
[False, False, False, True, False]], dtype=bool)
的情况,在最后一步,您也可以这样做 -
linear indexing
答案 1 :(得分:2)
你可以通过随机播放直接进行:
n = 3; m = 5
x = [True] * n + [False] * (m * m - n)
np.random.shuffle(x)
result = np.mat(x).reshape(m, m)