我正在处理以下示例。我想在以下代码段的最后一行中使用mu>=0.9
运行我的代码。
alpha,beta,loc,scale = stats.beta.fit(value)
error=(scale/(1.96))**2
gpdf = lambda B0, mu, sigma2: 1/np.sqrt(2*pi*sigma2)*np.exp(-1/2*((B0-mu)**2)/sigma2)
approx_sigma2 = lambda scale: (scale/(1.96))**2
ggpdf_v = lambda B0, D0, error: gpdf(B0, mu=0.8, sigma2=error) * (D0 < 3) + (D0 >= 3) * gpdf(B0, mu=0.5, sigma2=error)
ggpdf_r = lambda B0, D0, error: gpdf(B0, mu=0.5, sigma2=error)
ggpdf_c = lambda B0, D0, error: gpdf(B0, mu=0.7, sigma2=error)
ggpdf_v = lambda B0, D0, error: gpdf(B0, mu>=0.9, sigma2=error)
但是,我收到此错误NameError: name 'mu' is not defined
。它已经定义,但我看不到问题。如何解决此错误?
答案 0 :(得分:0)
此
gpdf(B0, mu=0.7, sigma2=error)
实际上是一个函数的语法,将0.7分配给该函数中名为mu
的参数,并将error
的值分配给该函数中名为sigma2
的参数。
mu>=0.9
不是在函数调用中分配给关键字参数的有效Python语法,但它是有效的普通Python表达式。但是,要对该表达式求值,必须定义变量mu
,实际上不是。但是即使定义了它,我也怀疑它会做您想要的事情:它将True
作为该函数的参数传递。
答案 1 :(得分:0)
正如其他地方所提到的,这来自您在关键字分配>=
中的错字,而不是=
。之所以令人困惑,是因为在定义f2
时,只有在评估f2
时(因为它隐藏在lambda中),您才可以点击它。
这是显示问题的最小示例。
>>> f1 = lambda a: None
>>> f2 = lambda: f1(a >= 0)
>>> f2()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
NameError: name 'a' is not defined