1

好的,开始吧。我有一个包含用户的元组列表,然后是他们的图书评级列表作为第二项。例如:

[('Ben', [5, 0, 0, 0, 0, 0, 0, 1, 0, 1, -3, 5, 0, 0, 0, 5, 5, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 1, 0, -5, 0, 0, 5, 5, 0, 5, 5, 5, 0, 5, 5, 0, 0, 0, 5, 5, 5, 5, -5]),
('Moose', [5, 5, 0, 0, 0, 0, 3, 0, 0, 1, 0, 5, 3, 0, 5, 0, 3, 3, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 3, 5, 0, 0, 0, 0, 0, 5, -3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 5, 5, 0, 3, 0, 0])]

这只是列表中的前两件事。好的,所以他们总共有 86 个用户和他们在列表中的评分。我需要弄清楚如何能够将 Ben 的所有评分乘以 Mooses 的所有评分,然后将它们加在一起。例如,Ben 的第一个评分是 5,Moose 的第一个评分是 5,所以我做 5x5,然后将其添加到相似度得分列表中。我的问题是我不知道如何将评分列表的所有元素乘以输入用户的评分列表。所以我基本上需要提示输入用户名,然后将所有其他用户的评分乘以所选用户并输出最高相似度分数。感谢任何帮助,因为我陷入了困境,在此先感谢。

4

1 回答 1

4

您可以使用 NumPy,但纯 Python 解决方案也很简单:

d = dict(my_list)
sum(map(operator.mul, d["Ben"], d["Moose"]))

第一行与问题无关——它只是将您的元组列表转换为更合适的字典。

要获得完整的相似性矩阵,您可以使用

{name1: {name2: sum(map(operator.mul, d[name1], d[name2])) for name2 in d}
         for name1 in d}

(后面的代码片段仅适用于 Python 2.7 或 3.x。)

于 2012-04-12T14:37:57.827 回答