首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lambdify-使用单个lambda x使用多个变量对表达式进行处理

Lambdify-使用单个lambda x使用多个变量对表达式进行处理
EN

Stack Overflow用户
提问于 2022-10-26 22:59:33
回答 1查看 35关注 0票数 0

假设您有以下同情表达式:

'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进行标记。

这是行不通的,但即使它在一些尝试后会起作用,我觉得这不是前进的道路。

有人对如何处理这件事有什么建议吗?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-27 07:07:15

可以对表达式进行预处理,将所有符号替换为IndexedBase,您可以将其视为数组:

代码语言:javascript
复制
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]**2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74215085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档