在函数内部遇到变量类型有问题

时间:2015-07-31 14:54:34

标签: 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个浮点数的列表 - 一维,事实证明我已经尝试回忆它并且函数内已经有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'

我真的尝试过我的小编程技巧可以解决的问题,但是我无法摆脱错误,它会不断重现。 为什么我只能用列表中的浮点数来计算?

我对编程很陌生,但我现在尝试了解更多内容。如果不让我知道,我希望我能回答你的要求。 @Anand S Kumar当我通过print smatrix[0]调用smatrix时它会显示2500.0,当我print smatrix时它会显示:

[2500.0, 3500.0, 5500.0, 6500.0, 7500.0, 8500.0, 9500.0, 10500.0,
11500.0, 12500.0, 13500.0, 14500.0, 15500.0, 16500.0,
17500.0, 18500.0, 19500.0, 20500.0, 21500.0, 22500.0, 23500.0, 24500.0,
25500.0, 26500.0, 27500.0, 28500.0, 29500.0, 30500.0, 31500.0, 32500.0,
33500.0, 34500.0, 35500.0, 36500.0, 37500.0, 38500.0, 39500.0, 40500.0,
41500.0, 42500.0, 43500.0, 44500.0, 45500.0, 46500.0, 47500.0, 48500.0,
49500.0, 50500.0, 51500.0, 52500.0, 53500.0, 54500.0, 55500.0, 56500.0,
57500.0, 58500.0, 59500.0, 60500.0, 61500.0, 62500.0, 63500.0, 64500.0, 
65500.0, 66500.0, 67500.0, 68500.0, 69500.0, 70500.0, 71500.0, 72500.0, 
73500.0, 74500.0, 75500.0, 76500.0, 78500.0, 79500.0, 80500.0, 81500.0, 
83500.0, 85500.0, 87500.0, 88500.0, 89500.0, 90500.0, 91500.0, 92500.0,
93500.0, 95500.0, 98500.0, 99500.0, 100500.0, 103500.0, 107500.0]

2 个答案:

答案 0 :(得分:2)

你唯一可以&#34;乘以&#34;标量值列表是您早期用于创建行的列表;列表乘以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。

答案 1 :(得分:0)

我总是从像你这样的人那里获得新的灵感。你真的把问题钉在了一起。非常感谢!!! 我按照您的建议使用numpy使其成功。

y_Dach[i] = np.multiply(c,( np.multiply(1.5,((smatrix[i])/a))
- (np.multiply(0.5,(((smatrix[i])/a)**3.0)))))

让我们看看我如何继续我的代码和未来的问题。我希望我不会很快再碰到一个。 :)