当我使用
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
现在是第一个值还是第二个值?
根据文档:
变量列表应与参数传递给函数的结构相匹配。只需将参数括起来,因为它们将在列表中传递。
(我将文本加粗以突出显示重要的一行。)
这意味着您应该使用与羔羊化结果时传递的参数相同的顺序来调用羔羊化结果。因此,在您的第一个版本中
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)
。