0

私は 2 つのベクトル間の内積を実行しようとしていますが、問題はそれらが対称でなければならないことです。

次のような 2 つのベクトルがある場合:

[('horse',2),('doll',34)]

[('horse',1),('monster',23),('salamander',12),('doll',17)]

この場合、数値の 2 つのベクトルがあります

[2,34]
[1,23,12,17]

しかし、正しい内積を行うには、同じ長さの2つのベクトルが必要であり、同じ単語の値は同じ位置にある必要があり、使用されていない位置をゼロで埋めます。

例えば:

[2,0,0,34]
[1,23,12,17]

この方法で最初のベクトルを変換する方法はありますか? 私はpythonでそれをしなければなりませんありがとう!

4

1 に答える 1

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
于 2014-09-19T14:54:03.910 に答える