具有可变长度参数的 lambdify sympy

lambdify sympy with Variable-Length Arguments

我有一个包含不同数量变量的 expr 列表,如下所示:

G = [[-x_1 + y_1], [-x_2 + y_1 + y_2], [y_1 + y_2] , [-y_3] , ....]

我想使用 sympy 和 lambdify 计算这些表达式。为此,我编写了以下说明:

def f(item):
    return lamndify(list(tem.free_symbols), item)



for  item in G:
    f_ = f(item)
    ...

现在,我应该怎么调用f_,因为每个term都有不同的变量?

也获取相关的 free_symbols。也许让你的功能 return 适合你,或者重新夺回它们:

def f(item):
    return lambdify(list(item.free_symbols), item)
def f2(item):
    args = list(item.free_symbols)
    return args, lambdify(args, item)

for [gi] in G:
    args = list(gi.free_symbols)
    f_ = f(gi)
    a, f2_ = f2(gi)
    assert f_(*args) == f2_(*a)

如果您有一组想要使用的值,例如 vals = {x_1:1,x_2:2,y_1:3,y_2:4,y_3:5},那么可以使用类似这样的值:

>>> for [gi] in G:
...     a, f2_ = f2(gi)
...     v = [vals[i] for i in a]
...     print(v, f2_(*v))
...
[3, 1] 2
[3, 2, 4] 5
[3, 4] 7
[5] -5