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)))))