是否存在NumPy函数可对多组概率进行随机采样?
向量化实现按对应概率生成0-1数组
你可以直接用numpy的随机数生成+元素级比较来实现完全向量化的采样,比循环调用np.random.choice效率高得多:
核心思路
生成和概率数组长度相同的[0,1)区间随机数,每个随机数如果小于对应位置的概率值p[i],就输出1,否则输出0。
代码实现
import numpy as np p = [0.5, 0.9, 0.1, 0.4] # 生成向量化采样结果 result = (np.random.rand(len(p)) < p).astype(int)
解释
np.random.rand(len(p)):生成和p长度一致的数组,每个元素是0到1之间的均匀分布随机数< p:元素级比较,得到布尔数组(True对应采样到1,False对应0).astype(int):把布尔值转成整数0和1
这种方法完全是向量化操作,避免了循环,比逐个调用np.random.choice的效率高很多,尤其当p的长度很大时优势更明显。
内容的提问来源于stack exchange,提问作者Mona
相关产品推荐
相关产品推荐

