替换部分sympy表达式

2024-06-16 16:52:47 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样一个同情心的表达:

x = ( 1+ r70f * C2H4 *H+ r71* O)

其中r70f, C2H4, H , r71, O是sympy变量。我希望它将其更改为以下表达式:

^{pr2}$

基本上将r_SomeNumber_f替换为k(r_SomeNumber_f),并分别将C2H4或{}或{}分别替换为c(sC2H4)或{}或{}。在

我试图使用正则表达式,但是re.sub需要str,但它们都是sympy对象,这让事情变得复杂了!!!在


Tags: 对象re表达式事情sympystrpr2somenumber
1条回答
网友
1楼 · 发布于 2024-06-16 16:52:47

我将演示两种方法:一种是使用符号欺骗,另一种是使用包装函数:

>>> ns={}
>>> ns["O"] = Symbol("O")
>>> x = S('1+ r70f * C2H4 *H+ r71* O', locals=ns)
>>> # Symbol trickery   changing the name to have parens in it
>>> print(x.replace(
...     lambda x: re.match('r[0-9]+f', str(x)),
...     lambda x: Symbol('k(%s)' % str(x))))
...
C2H4*H*k(r70f) + O*r71 + 1

# function wrapper
>>> k=Function('k')
>>> print(x.replace(lambda x: re.match('r[0-9]+f', str(x)), lambda x:k(x)))
C2H4*H*k(r70f) + O*r71 + 1

注意:你说你要找的是k_number_f,但是r71的情况没有以“f”结尾,所以它没有改变。在

我把其他被“c函数”包装的转换作为一个扩展。在

相关问题 更多 >