如何在python中获得向量(列表形式)的点积

时间:2016-01-11 03:02:27

标签: python

我们给出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

任何想法都会受到赞赏。

1 个答案:

答案 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)