Lambdify变量顺序
当我使用 lambdify
把一个 sympy 函数转换成可以进行数值计算的形式时,我需要把函数中的变量作为第一个参数传进去。我知道参数的数量很重要,但顺序也重要吗?我怎么知道在原始方程中,哪个字母对应哪个变量呢?比如:
x, b , c , d , r , z , p = symbols('x b c d r z p')
eq = x*b*c*d
la = lambdify((x, b, c, d), eq)
我之前输入的变量顺序是正确的,但我也可以用下面这个顺序而不会出错:
la = lambdify((r, x, z, p), eq)
现在我就搞不清楚哪个值对应哪个变量了。当我尝试用 la(...)
来解方程时,我不知道该按什么顺序放入这些值。请问 x
现在是第一个值还是第二个值呢?
1 个回答
3
根据文档的说明:
变量的列表应该和你传递给函数的参数结构一致。 只需将参数放在一个列表中,就像你传递它们时那样。
(我把这句话加粗是为了强调它的重要性。)
这意味着,当你调用经过处理的结果时,传入的参数顺序要和你处理时的顺序一致。所以在你的第一个版本中,x
应该是第一个参数,而在第二个版本中,它应该是第二个参数。
不过要记住,在你的第二个版本中,r
、z
和 q
不会起作用,因为它们没有出现在 eq
中,但你仍然需要为这些变量传递一些值。
另外,你可以调用 help(la)
,它会显示生成的函数。
>> help(la)
Help on function _lambdifygenerated:
_lambdifygenerated(x, b, c, d)
Created with lambdify. Signature:
func(x, b, c, d)
Expression:
b*c*d*x
Source code:
def _lambdifygenerated(x, b, c, d):
return b*c*d*x
Imported modules:
在这里你可以看到函数的签名是 (x, b, c, d)
。