我们给出2个稀疏向量v1和v2表示为计数器,我们需要返回它们的点积。到目前为止我的代码是明智的:
import collections
v1 = collections.Counter('aaabbbcccd')
v2 = collections.Counter('bcdd')
l1=list(v1.items())
l2=list(v2.items())
我不知道如何从这里开始,因为l1和l2包含:
[(' b',3),(' c',3),(' d',1),(' a&# 39;,3)]
[(' b',1),(' c',1),(' d',2)]
并且我不知道如何从此表单的列表中计算点积。 (在这种情况下将是3 * 1 + 3 * 1 + 1 * 2 + 3 * 0 = 8)
此代码也适用于任意长度的矢量,而不仅仅是4
任何想法都会受到赞赏。
答案 0 :(得分:0)
只需迭代任一dict的所有键并对产品求和(对于不存在的值返回0):
sum(v1.get(k, 0) * v2.get(k, 0) for k in v1)
我没有使用这些列表,因为在我看来它会不必要地使问题复杂化......
另请注意,我提供的答案适用于任何 python dict。对于Counter
个实例,第二步甚至更简单/更清晰:
sum(v1[k] * v2[k] for k in v1)