如何根据给定字符串的长度随机生成一个数字Python

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

我想从概率与标记字符串数量相关的范围中随机选择一个整数。

例如:

给定最大可能的令牌数 = 64。随机整数的范围是从 0 到 7

给定一个字符串有 46 个标记。

我想使用该功能

random.choices([0,1,2,3,4,5,6,7], weights=[..], k=1
并将
weights
设置为:
[0.1, 0.15, 0.2, 0.25, 0.3, 0.25, 0.2]

我只是举了一个

weights
的例子,我的意思是它的权重需要与
len(tokens)
max_len_token=64
相关。这里是 46 与 64 相比,所以它在 4 和 5 上给出了更多的概率,但仍然给其他人一个机会,只是减少了一些合理的比率

python
1个回答
0
投票

最好重构您的需求。如果问题是“如何从具有下限、上限和峰值(众数)的未知分布中获取随机整数值?”那么

random.triangular
方法可能比较合适。

from numpy import random
import matplotlib.pyplot as plt

def random_triangular_weighted(min_val, max_val, token_len, max_len_token):
    assert token_len <= max_len_token
    # Find modal value--it's token_len/max_token_len through the set
    mode_value = (max_val - min_val) * (token_len / max_len_token) + min_val
    rand_value = random.triangular(min_val, mode_value, max_val+1)
    
    return int(rand_value)

plt.hist([random_triangular_weighted(0, 7, 46, 64) for _ in range(100000)],
         bins=range(9),
         align='left')
plt.show()

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