我有一个python脚本NeoprobeApp.py
,它在Parameter.py
Parameter.py
中调用拟合函数,如下所示
from scipy import optimize
import numpy as np
class Parameter:
def __init__(self, value):
self.value = value
def set(self, value):
self.value = value
def __call__(self):
return self.value
def fit(function, parameters, y, x = None):
def f(params):
i = 0
for p in parameters:
p.set(params[i])
i += 1
return y - function(x)
if x is None: x = arange(y.shape[0])
p = [param() for param in parameters]
optimize.leastsq(f, p)
我成功导入了fit函数from Parameter import fit
。但是,当我尝试初始化我的参数时
# Define initial parameters of Gaussian fit
mu = Parameter(0)
sigma = Parameter(20)
height = Parameter(1)
#define Gaussian fit function
def f(angles): return height() * exp(-((angles-mu())/sigma())**2)
fit(f, [mu, sigma, height], n_col_cnts)
我收到错误消息
Traceback (most recent call last):
File "NeoprobeApp.py", line 228, in OnPlot
mu = Parameter(0)
NameError: global name 'Parameter' is not defined
我做错了什么?
答案 0 :(得分:7)
您只需导入fit
函数,但不导入Parameter
类。
使用
from Parameter import fit, Parameter
而不仅仅是
from Parameter import fit
答案 1 :(得分:2)
fit
和Parameter
只是表示Parameter
模块中的内容的名称。这些名字可以绑定任何东西。在这种情况下,fit
绑定到一个函数,Parameter
绑定到一个类。代码中任何位置都可访问的名称列表由名称范围定义。 import
语句将其他范围的名称带入当前范围。
BTW:在python中,模块应该命名为小写。 “模块”通常是python文件的内容,因此您应该将文件命名为parameter.py
,然后您的import语句将为:
from parameter import fit, Parameter