假设您有以下同情表达式:
'1.0 *H*L**3*W* *2‘
其中包含sp.Symbols variables=H、L和W。
如果这个表达式是使用sp.lambdify(sp.Symbol( vari )对变量中的vari进行lambdify编辑的,'1.0 *H*L**3*W* *2'),则得到一个< _lambdifygenerated(H,L,W)>函数。
但是,I需要获得一个< _lambdifygenerated(x)>函数,其中H=x、L=x1和W=x2.
我试图在原表达式'1.0 *H*L**3*W *2‘上直接替换{H:'x',W:'x1',L:'x2'},然后用x作为lambda进行标记。
这是行不通的,但即使它在一些尝试后会起作用,我觉得这不是前进的道路。
有人对如何处理这件事有什么建议吗?
非常感谢!
发布于 2022-10-27 07:07:15
可以对表达式进行预处理,将所有符号替换为IndexedBase,您可以将其视为数组:
from sympy import *
L, H, W = symbols("L H W")
expr = 1.0 * H * L**3 * W**2
variables = [L, H, W]
x = IndexedBase("x")
# substitution dictionary
d = {v: x[i] for i, v in enumerate(variables)}
expr = expr.subs(d)
print(expr)
# out: 1.0*x[0]**3*x[1]*x[2]**2
f = lambdify(x, expr)
import inspect
print(inspect.getsource(f))
# out:
# def _lambdifygenerated(Dummy_22):
# return 1.0*Dummy_22[0]**3*Dummy_22[1]*Dummy_22[2]**2https://stackoverflow.com/questions/74215085
复制相似问题