2017-06-14 32 views
2

我有一些符号表达式,我已经存储在一个文本文件中(因为它们太大)以后再阅读它们来查找它们的数值估计。所以,当我读完这些表达式(比如foo_sym),我转换这些表达式为Python函数如下:lambdify py函数:如何保持符号的顺序不变

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

一些表达符号变量是数组,所以我设置的功能的矢量版本:

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

现在,我找到量化功能的数字估计值如下:

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

在上面的代码中,顺序var_1, var_2, var_3, ...., var_12中的符号值与我通过tuple(foo_sym.free_symbols)获得的符号顺序一致。但是,每次我重新启动python并运行上面的代码时,我都会得到ValueError: math domain error,因为tuple(foo_sym.free_symbols)给出的符号变量的顺序似乎已更改,但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)