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)'
の名前空間で評価されます。sin
numpy.sin
私の知る限り、numba.jit と numba.autojit はバイトコードを変換するだけなので、ラムダで問題なく動作するはずです。