选择 Python 中概率随机的随机数
Choosing random number where probability is random in Python
虽然我可以找到有关如何根据使用 numpy.random.choice 选择每个数字的概率生成数字的不错信息,例如:
np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])
选择 0 的概率为 p =.1,1 的概率为 p = 0,2 的概率为 p = .3,3 的概率为 p = .6,4 的概率为 p = 0。
我想知道的是,有什么函数可以改变概率?因此,例如,有一次我可能有上面的概率分布,下一次可能有 p=[0.25, .1, 0.18, 0.2, .27])。所以我想即时生成概率分布。是否有 python python 库可以执行此操作?
我想要做的是生成数组,每个数组的长度为 n,其中包含来自某个概率分布的数字,如上。
据我所知,没有内置的方法可以做到这一点。您可以进行轮盘赌选择,应该可以完成您想要的。
基本思路很简单:
def roulette(weights):
total = sum(weights)
mark = random.random() * total
runner = 0
for index, val in enumerate(weights):
runner += val
if runner >= mark:
return index
您可以在 https://en.wikipedia.org/wiki/Fitness_proportionate_selection
阅读更多内容
一个不错的选择是 Dirichlet 分布:来自该分布的样本位于 K
维单纯形,也就是 多项式分布.
当然有一个方便的 numpy 函数可以生成任意数量的随机分布:
# 10 length-4 probability distributions:
np.random.dirichlet((1,1,1,3),size = 10)
这些将被馈送到您的 np.random.choice
调用中的 p=
参数。
您可以参考 Wikipedia 了解有关元组参数如何影响采样多项式分布的更多信息。
虽然我可以找到有关如何根据使用 numpy.random.choice 选择每个数字的概率生成数字的不错信息,例如:
np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])
选择 0 的概率为 p =.1,1 的概率为 p = 0,2 的概率为 p = .3,3 的概率为 p = .6,4 的概率为 p = 0。
我想知道的是,有什么函数可以改变概率?因此,例如,有一次我可能有上面的概率分布,下一次可能有 p=[0.25, .1, 0.18, 0.2, .27])。所以我想即时生成概率分布。是否有 python python 库可以执行此操作?
我想要做的是生成数组,每个数组的长度为 n,其中包含来自某个概率分布的数字,如上。
据我所知,没有内置的方法可以做到这一点。您可以进行轮盘赌选择,应该可以完成您想要的。
基本思路很简单:
def roulette(weights):
total = sum(weights)
mark = random.random() * total
runner = 0
for index, val in enumerate(weights):
runner += val
if runner >= mark:
return index
您可以在 https://en.wikipedia.org/wiki/Fitness_proportionate_selection
阅读更多内容一个不错的选择是 Dirichlet 分布:来自该分布的样本位于 K
维单纯形,也就是 多项式分布.
当然有一个方便的 numpy 函数可以生成任意数量的随机分布:
# 10 length-4 probability distributions:
np.random.dirichlet((1,1,1,3),size = 10)
这些将被馈送到您的 np.random.choice
调用中的 p=
参数。
您可以参考 Wikipedia 了解有关元组参数如何影响采样多项式分布的更多信息。