使用Python 3.7.3,从给定目录中的加权文件列表中随机选择
使用Python 3.7.3,我需要从给定目录中的加权文件列表中随机选择。权重是由文件的新程度以及用户是否已将文件标记为收藏夹来确定的,选择该文件的频率越高 设置权重最有效的方法是什么?我希望随机选择元素的分布行为与列表中权重的分布相同。收藏夹标志将存储在的字典中,文件名作为键,true/false作为值 假设权重列表中的项数必须等于filesList中的元素数,并且权重列表的总和必须为1。此外,这是正在运行的树莓皮3/4 如果另一种方法比numpy.random.choice更好,我完全赞成 我已经调查过了使用Python 3.7.3,从给定目录中的加权文件列表中随机选择,python,python-3.x,numpy,random,series,Python,Python 3.x,Numpy,Random,Series,使用Python 3.7.3,我需要从给定目录中的加权文件列表中随机选择。权重是由文件的新程度以及用户是否已将文件标记为收藏夹来确定的,选择该文件的频率越高 设置权重最有效的方法是什么?我希望随机选择元素的分布行为与列表中权重的分布相同。收藏夹标志将存储在的字典中,文件名作为键,true/false作为值 假设权重列表中的项数必须等于filesList中的元素数,并且权重列表的总和必须为1。此外,这是正在运行的树莓皮3/4 如果另一种方法比numpy.random.choice更好,我完全赞成
自Python3.6以来,有一个接受权重的 权重不必标准化,也就是说,它们的总和不必等于1
import random
choices = random.choices(filesList, weights=weights)
print(choices[0])
编辑:现在我意识到问题是关于实际重量的,有一些建议。对于每个文件,计算如下权重:
def计算重量(单位:天),常用:
年龄系数=1,设定你希望年龄有多重要
favorite_factor=1设置您希望最喜爱的内容有多重要
如果喜欢:
返回math.exp-age\u in\u days*age\u factor*favorite\u factor+1
其他:
返回math.exp-age(以天为单位)×age(年龄)因子
或者类似的东西。也许加上最喜欢的因子而不是乘上它,只是玩玩它。这是一个非常好而且很难回答的问题!这就是我被困住的原因。你在挣扎哪一部分?计算权重还是选择?计算权重。比如如何计算出总和为1的权重?很有趣。我试试看。只是好奇,为什么会是负面的?这是必需的还是?我认为你在混合指数函数和正态分布。否则我根本不知道你在说什么。这会管用的。非常感谢。注意,对于那些需要它的人,它会返回一个列表,因此如果您想要得到结果,请执行random.choicesfilesList,weights=weights[0]。删除了以前的注释,因为我开始变得咸了。很抱歉同样,这里有exp:exp-x的部分被称为指数衰减,expx是指数增长。这里有一个例子来说明我的意思。如果指数衰减太强,那么你可以用^-1衰减1/age\u in_days+1或更高的多项式来代替它,比如1/age\u in_days+1^2
import random
choices = random.choices(filesList, weights=weights)
print(choices[0])