1

Python で区分関数を実装しようとしています。私は numpy からかなりの数のツールを使用しているので、そこからすべてをインポートするだけです (つまりfrom numpy import *)。私の区分関数は次のように定義されます

LinQuad = piecewise( t, [t < 1, t >= 1], [lambda t : t, lambda t : t**2] )

エラーが発生しますNameError: global name 't' is not defined。なぜ定義する必要があるのか​​ わかりません。t結局のところ、t単純なラムダ関数を定義する必要はありませんLin = lambda t : t。いくつかの例ではドメインtが定義されていますが、関数がどの値で評価されるかわかりませんLinQuad。何をすべきか?

4

2 に答える 2

3

私は派手な専門家ではありませんが、部分的に関数を返し、それを他の場所で使用できると期待しているように見えます。それはそれがすることではありません-それは関数の結果自体を計算します。おそらく、任意のドメインを取り、それに基づいて計算を返すラムダ式を作成できます。

LinQuad = lambda x: piecewise(x, [x < 1, x >= 1], [lambda t: t, lambda t: t**2])

そこにcondlistブール配列を定義することについてあまり確信が持てません-おそらくそれはnumpyに固有のものです。

または、状況に応じて次のようにします。

def LinQuad(x):
   return piecewise(x, [x < 1, x >= 1], [lambda t: t, lambda t: t**2])
于 2013-05-15T21:45:28.150 に答える
1

np.piecewise呼び出すときに入力ドメインを定義する必要があります。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.piecewise.html

メソッドの指定方法を実際に回避することはできません。ラムダ関数を使用できますが、np.piecewise任意のドメインに対して適用できるメソッドは生成されません。

于 2013-05-15T21:11:31.583 に答える