亲爱的python Stackoverflow用户,
我想在循环中添加高斯函数,因为它可以使用+ =符号的整数来完成。但我不知道如何在循环中重新设置函数值。
我尝试过类似的事情:
def gaussian(x, mu, sig):
return np.exp(-np.power(x - mu, 2.) / (2 * np.power(sig, 2.)))
def f(x):
return 0
for i in xdata:
f(x) = f(x) + gaussian(x,i,20)
但是我收到了消息" SyntaxError:无法分配给函数调用"
我怎样才能做到这一点?
谢谢!
答案 0 :(得分:2)
根据我的评论:
你回答说:将代码中的
f(x)
替换为y
,并将def f(x): return 0
替换为y = 0
。
好的,它有效!然后只能用字母定义一个函数,而不提变量!
这不是真的发生了什么。您没有定义函数。您希望使用f(x)
不是一个功能。您定义的函数f
只做一件事:
def f (x):
return 0
该功能将始终返回0
。一旦定义了这样的函数,它就不能被改变(不用另一个函数替换它)。
您要做的是收集函数结果,但不是f
的结果,而是gaussian
的结果。或者实际上,您希望收集gaussian
函数调用的所有结果并总结它们。
所以你要做的是创建一个你将结果添加到的变量,这样就代表了这些函数调用的总和。
答案 1 :(得分:1)
f(x)返回一个结果,所以就像你说的那样0 = 12,例如......那会抛出一个错误,因为'='是赋值运算符,所以在它的左边,你应该只有变量(或第一次赋值的常量......)。
所以也许你想这样做:
y = f(x) + gaussian(x,i,20)
但我不想要你为什么要做一个“+ =”,因为它只适用于变量...而且你的函数总是返回0.所以你可能会说,而不是
def f(x):
return 0
简单地
y = 0
然后,在循环中告诉
y += gaussian(x, i, 20).
或者,如果您想构建曲线,可以使用数组。
还有一个错误: x在循环中没有定义(在两个函数中定义,但仅作为局部变量)
答案 2 :(得分:1)
def gaussian(x, mu, sig):
return np.exp(-np.power(x - mu, 2.) / (2 * np.power(sig, 2.)))
y = sum(gaussian(x, i, 20) for i in xdata)