所以基本上我有一张带照片的数据库表。每张照片的评级为< 0,1>和类别(一个或多个)。我需要一种方法从加权随机有效地选择此表中的x元素,但就类别而言,我必须在python3 + Django(或通过Redis进行通信或暴露RESTapi的微服务)中执行此操作。
例如: 表:
.---------.--------.------------.
| photo | rating | categories |
:---------+--------+------------:
| Value 1 | 0.8 | art, cats |
:---------+--------+------------:
| value 2 | 0.5 | cats |
:---------+--------+------------:
| value 3 | 0.9 | night |
'---------'--------'------------'
当我要求一张带有类别(猫,狗)的照片时。该算法应返回类似
的内容 numpy.random.choice([Value 1, Value 2], 1, [0.8, 0.5], replace=False)
目前,每当我被要求时,我都会采取以下措施:
photos = Photos.objects.filter(category__in=[list of wanted categories])
photos, weights = zip(*list(photos.values_list('photo', 'rating')))
res = numpy.random.choice(photos, amount_wanted, weights, , replace=False)
对此有更有效的方法吗?我可以使用任何AWS服务来实现它。
答案 0 :(得分:0)
您可以使用类似
的内容photo = random.sample(Photos.objects.filter(category__in=[list of wanted categories], rating__gte=random.random())), 1)
此行基本上会选择您想要的所有类别,根据其概率筛选出条目,然后返回一个随机的。