2014-09-19 2 views
0

두 벡터 사이에 내적 연산을하려하지만 문제는 그 값이 simmetrical이어야한다는 것입니다. 이제는 내가 의미하는 바를 설명합니다. 난이 다음과 같은 벡터가있는 경우Python, 두 벡터 사이의 DotProduct 문제

:이 경우

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

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

을 내가 올바른 내적을 수행하지만 두 싶은 수치

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

두 벡터를해야합니다 같은 길이의 벡터들과 같은 단어를 가진 값들은 같은 위치에 있어야하며, 사용되지 않은 위치는 0으로 채워야합니다. 예를 들어

:

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

모든 아이디어를 어떻게이 방법의 첫 번째 벡터를 변환하는 방법? 나는 파이썬으로해야만한다. 고마워!

답변

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

완벽한 감사합니다! –

관련 문제