首页 > 解决方案 > 如何高效地根据不同的概率生成一个0-1序列?

问题描述

我想得到一个随机的 0-1 序列。现在我一一生成数字。我的代码如下:

p_arr = [0.1, 0.5, 0.3, 0.8]
seq = []
for pb in p_arr:
  seq.append(np.random.choice(2, 1, p=[1-pb, pb]))

当 p_arr 的长度非常大(即 10000)时,非常耗时。我想知道是否有另一种更快的方法来做到这一点。

标签: pythonnumpyrandom

解决方案


如果您想使用 Numpy,请执行以下操作:

在线尝试!

import numpy as np
p_arr = [0.1, 0.5, 0.3, 0.8]
seq = (np.random.rand(len(p_arr)) > p_arr).astype(np.uint8)
print(seq)

如果您不想使用 Numpy,那么您仍然可以使您的代码更简单:

在线尝试!

import random
p_arr = [0.1, 0.5, 0.3, 0.8]
seq = []
for pb in p_arr:
  seq.append(1 if random.random() > pb else 0)
print(seq)

另请注意,在这两种情况下,我都认为您p_arr包含0(not 1) 的概率。如果您想反转逻辑,请在我的两个代码中替换><


推荐阅读