2014-09-19 4 views
0

Я пытаюсь сделать точечный продукт между двумя векторами, но проблема в том, что они должны быть симметричными, теперь я объясню, что я имею в виду.Python, DotProduct между двумя векторами issue

, если у меня есть два вектор, как эти:

[('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 Спасибо!

ответ

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 
+0

Отлично, спасибо !! –