[英]sympy substitution of occurences satisfying a given pattern
有沒有辦法對滿足給定模式的所有事件進行替換? 例如,如果我有一個包含多次出現的 sqrt(anything) 的表達式,是否有辦法用任何東西**0.51 替換所有這些出現?
這是一個代碼示例:
import sympy
from sympy import sqrt, exp
from sympy import *
x,y = symbols('x y')
test = sqrt (x+y) + sqrt (exp(y))
在這種情況下,我可以手動進行替換:
test.subs(sqrt(x+y), (x + y)**0.51).subs(sqrt (exp(y)) , (exp(y))**0.51)
產生預期的替代。 但是,有沒有一種方法可以一次性做到這一點,以便可以輕松地將其應用於長時間的表達?
您可以使用替換方法。 這是帶有幾個示例的文檔。
在您的特定情況下,平方根是指數為 0.5 的冪,因此我們將尋找這些對象:
test.replace(lambda t: t.is_Pow and t.exp is S.Half, lambda t: t.base**0.51)
您可以使用Wild
符號進行模式匹配替換:
In [7]: w = Wild('w')
In [8]: test
Out[8]:
____
_______ ╱ y
╲╱ x + y + ╲╱ ℯ
In [9]: test.replace(sqrt(w), w**0.51)
Out[9]:
0.51
0.51 ⎛ y⎞
(x + y) + ⎝ℯ ⎠
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.