随机将n个元素放在2D数组中

时间:2015-10-28 16:37:35

标签: python arrays numpy random

我需要一个布尔或二进制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])

2 个答案:

答案 0 :(得分:3)

您可以将np.random.choice与可选参数replace设置为False,以使unique random到{{strong> 0 ID可以使用linear indexing使用np.putm*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)