3

過去に numpy を使用したことがあり、かなり快適に使用できましたが、もう少し速度を上げたい場合は、numba.autojit デコレーターを使用できました。簡単。現在の問題は、私が現在一連の sympy 式に取り組んでおり、numba (jit または autojit) が lambdify から関数を作成する方法がわからないことです。sympy は特定の引数リストを保持していないようです。

sympy.lamdify がどのように機能するかを調べて、numba を組み込んだ独自のバージョンを作成できると思いますが、最初に聞いてみようと思いました。

4

2 に答える 2

4

2 番目の質問に答えるために、lambdify が機能する方法は、式の文字列形式をラムダとして作成し、それをeval数値関数を含む名前空間に配置することです。

たとえば、 forlambdify(x, sin(x), 'numpy')は(ここでの文字列形式は通常の文字列形式と同じですが、たとえば、 sin(x)SymPy'sin(x)'と NumPy の関数名が異なるため、異なる場合があります。これをsympy.printing.lambdarepr.lambdarepr行う関数は です。関数がsympy.utilities.lambdify.lambdastr次のステップも実行します。

これが に追加されlambda、 が与えられ'lambda x: sin(x)'ます。

すると、だいたい

g = {}
exec 'from numpy import *' in g # or exec('from numpy import *', g) in Python 3
l = eval('lambda x: sin(x)', g)

lラムディファイズ関数になります 。

つまり、 is'lambda x: sin(x)'の名前空間で評価されます。sinnumpy.sin

私の知る限り、numba.jit と numba.autojit はバイトコードを変換するだけなので、ラムダで問題なく動作するはずです。

于 2014-04-07T01:41:18.623 に答える
1

私自身 numba を使用したことはありませんが、lambdify には精通しており、そのままでは機能しないことがわかります。したがって、これを自分で実装することに慣れている場合は、lambdify する「numba」モジュールをhttps://github.com/sympy/sympyで「プル リクエスト」として送信することをお勧めします。

私自身、デフォルトの sympy が遅すぎる私のプロジェクトの 1 つに lambdify に似たものを実装しました

于 2014-04-05T08:58:22.057 に答える