我试图在两个向量之间做一个点积,但问题是它们必须是simmetrical,现在我解释我的意思。
如果我有两个这样的矢量:
[('horse',2),('doll',34)]
[('horse',1),('monster',23),('salamander',12),('doll',17)]
在这种情况下,我将有两个数值向量
[2,34]
[1,23,12,17]
但要做一个正确的点积我想有两个相同长度的向量,并且具有相同单词的值必须位于相同的位置,用零填充未使用的位置。
例如:
[2,0,0,34]
[1,23,12,17]
如何以这种方式转换第一个向量的任何想法?我必须在python中完成它 谢谢!
答案 0 :(得分:2)
使用dict.get
:
>>> list1 = [('horse',2),('doll',34)]
>>> list2 = [('horse',1),('monster',23),('salamander',12),('doll',17)]
>>> d = dict(list1) # => {'horse': 2, 'doll': 34}
>>> v2 = [value for name, value in list2]
>>> v1 = [d.get(name, 0) for name, value in list2]
>>> # d.get(name, 0) will return `0` for non-existing key (name).
>>> v1
[2, 0, 0, 34]
>>> v2
[1, 23, 12, 17]
>>> sum(x * y for x, y in zip(v1, v2))
580