【发布时间】:2017-06-14 17:22:24
【问题描述】:
我有一些符号表达式已存储在文本文件中(因为它们太大),以后无法读取它们以找到它们的数值估计值。因此,在我阅读了这些表达式(比如foo_sym)之后,我将这些表达式转换为 python 函数,如下所示:
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) 时?
【问题讨论】:
标签: python function sympy symbolic-math lambdify