2017-06-14 11 views
2

数字の見積もりを見つけるために後で読むために、テキストファイルに保存したシンボリックな表現があります(大きすぎるため)。lambdify to py関数:シンボルの順序を一定に保つ方法

import sympy as sym 
foo_fn = sym.lambdify(tuple(foo_sym.free_symbols), foo_sym) 

は、式中の記号変数の一部が配列されているので、私のセットアップ機能のベクトル化バージョンをなど:私はそれらの式(foo_sym発言を)読んだ後そう、私は次のようにPythonの関数にそれらの表現を変換します:上記のコードで

foo_num = foo_fn_vec(var_1, var_2, var_3, ...., var_12) 

の順序:

import numpy as np 
foo_fn_vec = np.vectorize(foo_fn) 

は今、私は、次のようにベクトル化関数の数値推定値を見つけますvar_1, var_2, var_3, ...., var_12の記号の値は、tuple(foo_sym.free_symbols)の記号の順番と一致しています。しかし、私はtuple(foo_sym.free_symbols)で与えられた記号変数の順序が変更されたように見えるので、私はPythonを再起動して上記のコードを実行するたびにValueError: math domain errorを取得しますが、foo_fn_vec(var_1, var_2, var_3, ...., var_12)の値の順序は変更されていません。

両方のステップでシンボルの順序を一定に保つ方法、つまりsym.lambdify((var_1, var_2, var_3, ...., var_12), foo_sym)の関数に変換するときに、関数の数値をfoo_num = foo_fn_vec(var_1, var_2, var_3, ...., var_12)として見つけ出す方法はありますか?

答えて

0

sym=tuple(ordered(foo_sym.free_symbols))を使用すると、検索されるシンボルは常に同じ順序になります。次に、foo_fn_vec(*sym)とし、次にsym.lambdify(sym, foo_sym)とします。

関連する問題