python - 如何高效地根据不同的概率生成一个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)时,非常耗时。我想知道是否有另一种更快的方法来做到这一点。
解决方案
如果您想使用 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
) 的概率。如果您想反转逻辑,请在我的两个代码中替换>
为<
。
推荐阅读
- javascript - 猫鼬在 ref 字段中添加更多键:值
- python - 如何将一个列表中的元素添加到另一个列表中?
- bash - 测量固定宽度输出中的字段/列宽 - 查找分隔符?
- javascript - 当反应应用程序未在 localhost:3000 上加载时,如何设置 webpack 和 babel
- javascript - URL 条件 Wordpress 小部件按钮
- assembly - mov 命令上的内存偏移
- python - 从行中删除一些部分
- python - 运行 /usr/bin/python3 -m pip install cImage 后 pycharm 中未解析的引用“cImage”
- llvm - 基本编译的 LLVM-IR 导致分段错误
- python - Python pandas:滚动总和不会产生 12 个月的总和