2016-01-11 217 views
0

中获得向量(列表形式)的点积,我们给出了2个稀疏向量v1和v2表示为Counters,我们需要返回它们的点积。我有什么明智至今代码:我怎样才能在python

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',3)]

[( 'b',1),( 'C',1),( 'd',2)]

和我不知道如何从这个表格的列表中计算点积。 (在这种情况下将是3 * 1 + 3 * 1 + 1 * 2 + 3 * 0 = 8)

也这个代码是假设为任意长度的矢量工作,不只是4

任何想法将不胜感激。

回答

0

只是遍历要么字典的所有键和总结的产品(返回0中不存在的值):

sum(v1.get(k, 0) * v2.get(k, 0) for k in v1) 

我没有使用的名单,因为在我看来,喜欢它就这个问题不必要的复杂...


另外请注意,我已经回答了任何蟒蛇字典提供的作品。对于Counter实例,第二步得到更简单/更清洁:

sum(v1[k] * v2[k] for k in v1)