您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

对具有多个值和权重的项目进行排名的最快方法

对具有多个值和权重的项目进行排名的最快方法

您无法获得线性时间,但可以更快地完成。对我来说,这看起来像是一个矩阵乘法,所以我建议您使用numpy

import numpy as np

keys = ['key1', 'key2', 'key3']

values = np.matrix([
    [1.1, 1.2, 1.3, 1.4],
    [2.1, 2.2, 2.3, 2.4],
    [3.1, 3.2, 3.3, 3.4]
])

weights = np.matrix([[10., 20., 30., 40.]]).transpose()

res = (values * weights).transpose().tolist()[0]

items = zip(res, keys)
items.sort(reverse=True)

这使

[(330.0, 'key3'), (230.0, 'key2'), (130.0, 'key1')]

有感谢@Ondro为np.dot并以@unutbu为np.argsort,这里是numpy的完全的改进版本:

import numpy as np

# set up values
keys = np.array(['key1', 'key2', 'key3'])
values = np.array([
    [1.1, 1.2, 1.3, 1.4],    # values1_x
    [2.1, 2.2, 2.3, 2.4],    # values2_x
    [3.1, 3.2, 3.3, 3.4]     # values3_x
])
weights = np.array([10., 20., 30., 40.])

# crunch the numbers
res = np.dot(values, -weights)   # negative of weights!

order = res.argsort(axis=0)  # sorting on negative value gives
                             # same order as reverse-sort; there does
                             # not seem to be any way to reverse-sort
                             # directly
sortedkeys = keys[order].tolist()

结果是['key3', 'key2', 'key1']

其他 2022/1/1 18:14:51 有444人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶