如何在SymPy中对符合指定模式的表达式进行批量替换?
在SymPy中批量替换符合模式的表达式实例
当然可以一次性完成这类批量替换,不用手动逐个调用subs。SymPy提供了通配符(Wild)结合replace(或subs)的方式,能匹配所有符合指定模式的子表达式并替换。
具体实现代码
import sympy from sympy import sqrt, exp, Wild, symbols x, y = symbols('x y') test = sqrt(x+y) + sqrt(exp(y)) # 定义通配符,匹配任意子表达式 w = Wild('w') # 一次性替换所有sqrt(任意内容)为对应内容的0.51次方 result = test.replace(sqrt(w), w**0.51) print(result)
运行结果
输出会是:
(x + y)**0.51 + exp(y)**0.51
原理说明
Wild('w')定义了一个通配符w,它可以匹配SymPy表达式树中的任意合法子表达式。test.replace(sqrt(w), w**0.51)会遍历整个test表达式,把所有符合sqrt(...)结构的子表达式,替换成括号内内容的0.51次方。- 你也可以用
subs方法实现同样效果,写法是:
两种方式在这个场景下效果一致。result = test.subs(sqrt(w), w**0.51)
这种方法完全适用于长表达式,不管里面有多少个sqrt实例,都能一次替换完成。
内容的提问来源于stack exchange,提问作者ogledala
相关产品推荐
相关产品推荐

