Python 函数中的variabletype有问题
我一次又一次地犯同样的错误。 我定义了多个函数,但这部分有问题:Python 函数中的variabletype有问题,python,Python,我一次又一次地犯同样的错误。 我定义了多个函数,但这部分有问题: a = 50000.0 c = 1.0 def fkt(smatrix, a, c): y_Dach = [0.] * 93 for i in range(0, 93): y_Dach[i] = c*( 1.5*(smatrix[i])/a - 0.5*((smatrix[i])/a)**3.0 ) return y_Dach 因此,smatrix是一个具有93个浮点数的列
a = 50000.0
c = 1.0
def fkt(smatrix, a, c):
y_Dach = [0.] * 93
for i in range(0, 93):
y_Dach[i] = c*( 1.5*(smatrix[i])/a -
0.5*((smatrix[i])/a)**3.0 )
return y_Dach
因此,smatrix是一个具有93个浮点数的列表-1维,这一点可以通过我尝试调用它以及函数中带有print smatrix[0]
和print type(smatrix[0])
的类型来证明,并且它可以按预期工作
我的问题是,我一直犯这个错误:
Traceback (most recent call last):
File "bla.py", line 260, in <module>
print anneal(fkt, a, c, bmatrix)
File "bla.py", line 242, in anneal
fkt(smatrix, a, c)
File "bla.py", line 220, in fkt
y_Dach[i] = c*( 1.5*(smatrix[i])/a -
0.5*((smatrix[i])/a)**3.0 )
TypeError: can't multiply sequence by non-int of type 'float'
唯一可以将列表与标量值“相乘”的时间是早期创建行时使用的时间;一个列表乘以一个int执行重复的连接。没有定义其他列表/标量操作(包括交换元素顺序:3*[1,2,3]
未定义,与[1,2,3]*3
不同)
为了在一行上执行像1.5*smatrix[i]/a
这样的操作,您需要自己一次执行一个元素:
new_row = []
for v in smatrix[i]:
new_row.append(1.5*v/a)
或者使用像
numpy
这样的软件包,它为标量/矩阵/向量操作提供了一个API。像你这样的人总能给我带来新的灵感。你真的解决了这个问题。谢谢!!!
我按照您的建议使用numpy
使它工作
y_Dach[i] = np.multiply(c,( np.multiply(1.5,((smatrix[i])/a))
- (np.multiply(0.5,(((smatrix[i])/a)**3.0)))))
让我们看看我如何处理代码和未来的问题。我希望我不会很快再遇到这样的人 向我们展示smatrix是如何定义的以及如何调用函数?/*BTW
[0.对于范围(93)中的j]
可以写得更短,因为[0]*93
*/将计算拆分到多行并使用局部变量。这将使它更易于阅读,也便于了解错误消息指示的内容。在该语句中有两个乘法,因此任何一个都可能是错误。我定义了smatrix=[1.0,2.0,3.0]
,表达式的计算结果没有错误。因为还没有人明确说明这一点,所以会出现错误,因为您认为是浮点的东西实际上是一个列表或其他序列。我觉得从异常原因看这是很清楚的,但是出于某种原因,很多新的程序员都不喜欢类型不匹配的异常。。。您评论了您的评论?非常感谢,您可能指出了问题的根源。现在我开始理解这个问题了,我也理解了dsh上面的意思。我试图修复我的代码,当我完成后,我将把工作代码放在另一条评论中,供未来用户使用。
y_Dach[i] = np.multiply(c,( np.multiply(1.5,((smatrix[i])/a))
- (np.multiply(0.5,(((smatrix[i])/a)**3.0)))))