2

我有一些符号表达式已存储在文本文件中(因为它们太大),以后无法读取它们以找到它们的数值估计值。因此,在我阅读了这些表达式(比如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)

4

1 回答 1

1

如果您使用sym=tuple(ordered(foo_sym.free_symbols))检索到的符号将始终处于相同的顺序。然后,您可能希望将这些用作foo_fn_vec(*sym)然后sym.lambdify(sym, foo_sym)

于 2017-09-27T13:46:03.890 回答