gpt4 book ai didi

python - 给定一系列 bin 概率,如何生成 bin 计数的随机样本?

转载 作者:太空狗 更新时间:2023-10-30 01:00:51 27 4
gpt4 key购买 nike

我有一个整数需要根据概率分布分成 bin。例如,如果我有 N=100 对象进入 [0.02, 0.08, 0.16, 0.29, 0.45] 那么你可能会得到 [1, 10, 20 , 25, 44]

import numpy as np
# sample distribution
d = np.array([x ** 2 for x in range(1,6)], dtype=float)
d = d / d.sum()
dcs = d.cumsum()
bins = np.zeros(d.shape)
N = 100
for roll in np.random.rand(N):
# grab the first index that the roll satisfies
i = np.where(roll < dcs)[0][0]
bins[i] += 1

实际上,N 和我的 bin 数量非常大,因此循环并不是一个真正可行的选择。有什么方法可以矢量化此操作以加快速度吗?

最佳答案

您可以通过获取 cumsum 将 PDF 转换为 CDF,使用它来定义一组介于 0 和 1 之间的 bin,然后使用这些 bin 计算 N 长随机数的直方图统一向量:

cdf = np.cumsum([0, 0.02, 0.08, 0.16, 0.29, 0.45])     # leftmost bin edge = 0
counts, edges = np.histogram(np.random.rand(100), bins=cdf)

print(counts)
# [ 4, 8, 16, 30, 42]

关于python - 给定一系列 bin 概率,如何生成 bin 计数的随机样本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31730028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com