2015-04-17 3 views
0

Если у меня есть одно целое число и умножьте его на каждое целое число в контейнере (кортеж) и добавьте их вместе - похоже на точечный продукт - я получаю правильный ответ. Когда я конвертировать их в поплавках, я получаю TypeError:Почему я получаю TypeError при попытке сделать dot product?

TypeError: не может умножать последовательность неисполнением междунар типа «поплавком»

sig = {'a': 1.0, 'b': 2.0, 'c': 3.0} 
exp = {'a': (1.0,2.0,3.0), 'b': (1.0,2.0,3.0), 'c': (1.0,2.0,3.0)} 
man_dot = {'a': 1*1+1*2+1*3, 'b': 2*1+2*2+2*3, 'c': 3*1+3*2+3*3} 

weighted_dict = {} 
for s in sig: 
    print("this is s:\n{}".format(s)) 
    for e in exp: 
     print("this is e:\n{}".format(e)) 
     weighted_dict[s] = sum(sig[s] * exp[e]) 
# weighted_dict should be equivalent to man_dot 
# weighted_dict should be {'a': 6, 'c': 18, 'b': 12} 

Этот скрипт должен обрабатывать операции с плавающей точкой, так как может Я изменяю его, чтобы сделать это? Почему это происходит? Есть ли лучше сделать это с помощью некоторой математически ориентированной библиотеки?

ответ

1

Ваша проблема заключается в том, что вы пытаетесь умножить (1.0, 2.0, 3.0) на 1.0, что дает вышеупомянутую ошибку. Попробуйте следующее:

sig = {'a': 1.0, 'b': 2.0, 'c': 3.0} 
exp = {'a': (1.0,2.0,3.0), 'b': (1.0,2.0,3.0), 'c': (1.0,2.0,3.0)} 
man_dot = {'a': 1*1+1*2+1*3, 'b': 2*1+2*2+2*3, 'c': 3*1+3*2+3*3} 

weighted_dict = {} 
for s in sig: 
    print("this is s:\n{}".format(s)) 
    for e in exp: 
     print("this is e:\n{}".format(e)) 
     weighted_dict[s] = sum([sig[s] * item for item in exp[e]]) 

>>> weighted_dict 
{'c': 18.0, 'a': 6.0, 'b': 12.0} 
>>> 
+0

Отлично предложение, спасибо. Поэтому проблема заключалась в том, что я не выполнял итерацию через значения кортежа {exp}. Но почему он работает с целыми числами, но не плавает? –

Смежные вопросы