函数中的variabletype有问题吗

2024-09-28 01:30: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个float的列表-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'

我真的尝试了我的编程技巧所能做的一切来解决这个问题,但我无法摆脱这个错误,它不断地出现。 为什么我不能计算只有浮动在我的名单?你知道吗

我对编程还很陌生,但我现在想尽一切办法学习更多。我希望我能正确答复你的要求,如果不让我知道。 @当我通过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]

Tags: 函数inpytype编程错误linefloat
2条回答

我总是从你这样的人那里得到新的灵感。你真的解决了问题。谢谢!!! 我按照您的建议使用numpy使它工作。你知道吗

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

让我们看看我如何处理代码和未来的问题。我希望我不会很快再遇到这样的人。:)

唯一可以将列表与标量值“相乘”的时间是早期用于创建行的时间;列表乘以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。你知道吗

相关问题 更多 >

    热门问题