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)

フィット関数を正常にインポートしました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

2

fitとはどちらも、モジュールParameter内のものを示すための単なる名前です。Parameterこれらの名前は、何にでもバインドできます。この場合、fitは関数にParameterバインドされ、クラスにバインドされます。コード内の任意のポイントでアクセスできる名前のリストは、名前のスコープによって定義されます。このimportステートメントは、他のスコープの名前を現在のスコープに取り込みます。

ところで: Python では、モジュールの名前は小文字にする必要があります。「モジュール」は通常、python ファイルの内容であるため、実際にファイルに名前を付ける必要がparameter.pyあり、インポート ステートメントは次のようになります。

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