我想从概率与标记字符串数量相关的范围中随机选择一个整数。
例如:
给定最大可能的令牌数 = 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 上给出了更多的概率,但仍然给其他人一个机会,只是减少了一些合理的比率
最好重构您的需求。如果问题是“如何从具有下限、上限和峰值(众数)的未知分布中获取随机整数值?”那么
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()