【问题标题】:Randomly place n elements in a 2D array在二维数组中随机放置 n 个元素
【发布时间】:2016-01-28 13:20:57
【问题描述】:

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

【问题讨论】:

  • 如果你能用例子解释你的用例会很好。
  • 我不明白你的意思。这个问题不清楚吗?

标签: python arrays numpy random


【解决方案1】:

你可以直接用 shuffle 来做:

n = 3; m = 5
x = [True] * n + [False] * (m * m - n)
np.random.shuffle(x)
result = np.mat(x).reshape(m, m)

【讨论】:

    【解决方案2】:

    您可以将np.random.choice 与可选参数replace 设置为False 一起使用,以使从0m*m-1unique random ID 可以设置为oneszeros 初始化 2D 数组中使用 linear indexingnp.put。因此,实现看起来像这样 -

    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的情况,最后一步,你也可以这样做-

    out.ravel()[np.random.choice(range(m*m), n, replace=False)] = 1
    

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 2023-03-21
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多