【发布时间】: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]
我知道我们可以使用以下代码行创建一个布尔值的 NumPy 数组:
np.random.choice(a=[False, True], size=(N,))
但是如果我想指定我希望这个随机数组具有大约 60%(或更一般地 k%)的 True 值怎么办?
【问题讨论】:
p 值,所以你可以设置p=[0.4, 0.6]
对于大型数组,使用 np.random.choice 可能会非常慢。我建议这样做
import numpy as np
N = 100_000
booleans = np.random.rand(N) < 0.6
np.random.rand 将在0.0 和1.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
【讨论】:
使用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
【讨论】: