我在定义函数以使错误"numpy.ndarray"不可调用时做错了什么?



这是我的代码:

def lsf2(x,y): 
N = 100
A = (sum(x)*sum(y))/(sum(x)*(1-n))
B = (sum(y)-N*A)/sum(x)
delta = N*(sum(x**2)*sum(y))- sum(x)*sum(x*y)
sigy = (sum(y-A-B*x)**2/(N-2))**0.5
siga = sigy(sum(x)**2)/delta
sigb = sigy*(N/delta)**0.5
return A, B, sigy, siga, sigb 
A, B, sigy, siga, sigb = lsf2(xdata, ydata)

print(A, B, sigy, siga, sigb)

我得到的错误是这样的:

----> 7 siga = sigy(sum(x(**2(/delta

类型错误:"numpy.ndarray"对象不可调用

你有:

sigy = (sum(y-A-B*x)**2/(N-2))**0.5
siga = sigy(sum(x)**2)/delta

sigy是一个数字数组。当您键入sigy(sum(x)**2)/delta时,您尝试sum(x)**2作为输入传递,就好像sigy是一个函数,但事实并非如此。

也许你需要:

siga = sigy*(sum(x)**2)/delta # multiplication

siga = sigy**(sum(x)**2)/delta # power

错误告诉您您正在尝试使用sigy(...)调用函数sigy但它是一个数组而不是函数。根据错误后面的行,我认为您缺少一个*

siga = sigy*(sum(x)**2)/delta
^ here

在数学中,我们可以写类似x(a+b)的东西,我们假设x的值乘以括号内的结果。在 Python 中,这种相同的语法意味着将括号内的值传递给名为x的函数。您不能在 Python 程序中省略乘法运算符。

sigy是一个numpy数组,而不是一个函数。在第siga = sigy(sum(x)**2)/delta行中,sigy()试图调用一个名为sigy和参数sum(x)**2的函数。如果您尝试索引sigy则需要使用[]sigy[index].

相关内容

最新更新