0

我有一个NeoprobeApp.py调用拟合函数的python脚本,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

我究竟做错了什么?

4

2 回答 2

7

您只需导入fit函数,而不是Parameter类。

利用

from Parameter import fit, Parameter

而不仅仅是

from Parameter import fit
于 2013-07-30T08:43:26.007 回答
2

两者fitParameter都只是表示Parameter模块中事物的名称。这些名称可以绑定到任何东西。在这种情况下,fit绑定到一个函数并Parameter绑定到一个类。在代码中的任何点可访问的名称列表由名称的范围定义。该import语句将来自其他范围的名称带入您当前的范围。

顺便说一句:在 python 中,模块应该被命名为小写。“模块”通常是 python 文件的内容,因此您应该真正命名该文件parameter.py,然后您的导入语句将是:

from parameter import fit, Parameter
于 2013-07-30T08:51:23.640 回答