2015-04-17 30 views
0

如果我有一个整数并将它乘以一个容器(元组)中的每个整数并将它们加在一起 ​​- 类似于点积 - 我可以得到正确的答案。当我将它们转换为花车,我得到一个类型错误:为什么我在尝试使用点积时会得到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} 
花车

该脚本必须处理操作的非INT繁衍序列,这样怎么能我修改它来做到这一点?为什么会发生?有没有更好的做一些面向数学的图书馆?

回答

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}的元组值。但为什么它使用整数而不是浮点数? –

相关问题