加权随机选择与类别

时间:2017-03-05 16:38:35

标签: python django

所以基本上我有一张带照片的数据库表。每张照片的评级为< 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服务来实现它。

1 个答案:

答案 0 :(得分:0)

您可以使用类似

的内容
photo = random.sample(Photos.objects.filter(category__in=[list of wanted categories], rating__gte=random.random())), 1)

此行基本上会选择您想要的所有类别,根据其概率筛选出条目,然后返回一个随机的。