我想创建一个随机函数,其中100是最稀有的数字,而1是最常见的数字。它应该是一个线性分布,例如返回100的函数是最低概率,然后99是第二低概率,然后98是第三低概率,依此类推。我已在下面尝试了此代码:
def getPercentContent():
minPercent = 5
maxPercent = 102 # this will return 101 as highest number
power = 1.5 # higher number, more concentration to lower numbers
num = math.floor(minPercent+(maxPercent-minPercent)*random.random()**power)
return str(num)
通过1-10,这确实会返回更多的低数值,但在这之后,因为它是指数函数,所以10-100的数值非常相似
您所描述的是一个triangular distribution,其模式(最常出现的值)等于min。这些是作为random模块或numpy中的连续分布内置的。如果希望整数结果从1到100(包括1到100),请使用
min = mode = 0
和max = 100
生成,发言,并将1添加到结果中以下代码在我的笔记本电脑上半秒钟内生成并绘制了一百万个三角形值:
样本输出:
对于您正在寻找的分布,只需在该范围内生成两个数字并取其最小值。以下是一个例子:
您只需返回输入的任何数字的倒数,然后通过所有频率的总和对所有值进行归一化,以获得百分比:
相关问题 更多 >
编程相关推荐