Lambdify变量顺序

0 投票
1 回答
41 浏览
提问于 2025-04-13 15:07

当我使用 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 应该是第一个参数,而在第二个版本中,它应该是第二个参数。

不过要记住,在你的第二个版本中,rzq 不会起作用,因为它们没有出现在 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)

撰写回答