【问题标题】:How to create a NumPy array of booleans with k% True values?如何创建具有 k% True 值的 NumPy 布尔数组?
【发布时间】:2021-12-12 20:47:14
【问题描述】:

我知道我们可以使用以下代码行创建一个布尔值的 NumPy 数组:

np.random.choice(a=[False, True], size=(N,))

但是如果我想指定我希望这个随机数组具有大约 60%(或更一般地 k%)的 True 值怎么办?

【问题讨论】:

  • choice 取一个p 值,所以你可以设置p=[0.4, 0.6]

标签: python numpy random


【解决方案1】:

对于大型数组,使用 np.random.choice 可能会非常慢。我建议这样做

import numpy as np
N = 100_000
booleans = np.random.rand(N) < 0.6

np.random.rand 将在0.01.0 之间产生统一的随机数,并且比较会将0.6 下的所有数字设置为True,从而为您提供大约60% 的True 值的数组。

如果您需要的正是您要求的比例,您可以这样做

k = 60  # 60%
booleans = np.zeros(shape=(N,), dtype=bool) # Array with N False
booleans[:int(k / 100 * N)] = True  # Set the first k% of the elements to True
np.random.shuffle(booleans)  # Shuffle the array

np.count_nonzero(booleans)  # Exactly 60 000 True elements

【讨论】:

    【解决方案2】:

    使用np.choice的概率数组参数

    import numpy as np
    
    N = 100
    res = np.random.choice(a=[False, True], size=(N,), p=[0.4, 0.6])
    print(np.count_nonzero(res))
    

    输出(单次运行)

    62
    

    【讨论】:

      猜你喜欢
      • 2021-11-29
      • 1970-01-01
      • 2017-11-22
      • 2019-01-28
      • 2018-06-06
      • 2022-01-25
      • 2013-06-19
      • 2014-12-20
      相关资源
      最近更新 更多