如何从Python中的列表中非均匀地进行采样

问题描述 投票:0回答:1

您能否请您建议如何从具有已定义概率的分布中进行采样(或者在下面更好地解决我的问题):

我有一个项目清单。我现在可以用rand_word = randint(0, total_num)从中取样。但我希望列表后面的元素更频繁地出现。

例如,作为一个例子,我希望列表的前20%的项目以概率10%出现,最后20%出现概率为50%到60%。 (虽然分发可能更复杂。)

python-3.x random
1个回答
0
投票

您的请求非常开放,因此有无数的发行版可以满足您的要求。根据您实际需要的分布,实现可能会有很大差异。

也就是说,正确参数化的triangle distribution将从列表的开头不那么频繁地采样,并且更频繁地从结尾采样。这是一个简单的实现:

from random import random
from math import sqrt

def sample_triangle(ary):
    return ary[int(len(ary) * sqrt(random()))]

取连续均匀(0,1)的平方根生成一个连续的三角形随机变量,其中min等于0,并且max和mode都等于1.将它乘以列表的长度并将其整合将其转换为一个有整数三角形分布的有效列表索引。

以下是从包含数字1到20的列表生成的10,000个值的示例运行结果:

Histogram of generated triangle distribution.

© www.soinside.com 2019 - 2024. All rights reserved.