簡體   English   中英

對滿足給定模式的事件進行同情替換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM