嗨,我编辑我的问题是因为我发现我的问题更大:我不能使用subs函数:
from sympy import *
x, y, z = symbols("x y z")
expr = x
expr.subs(x, y)
print(expr)给我一个"x“。这可能是因为我用同情的方式来对付蟒蛇吗?
编辑之前的问题:
我是新来的,我的问题是:我想用一个sum (3+2)替换值5,但是不能用.subs来管理它,我尝试了这样做:
from sympy import *
def change(expr):
'''
if it's a leaf substitute 5 by 3+2
'''
if len(expr.args)==1:
expr.subs(UnevaluatedExpr(5), UnevaluatedExpr(3) + UnevaluatedExpr(2))
print(expr)
for arg in expr.args:
change(arg)
expr = UnevaluatedExpr(5)*UnevaluatedExpr(10)-UnevaluatedExpr(5)**UnevaluatedExpr(2)
#i.e. 5*10-5^2
change(expr) #should substitue 5s by (2+3)但是它并没有改变任何事情:/如果你对我做错了什么有任何想法,我会非常感谢,提前谢谢!编辑:我在subs函数中有一个错误,但是它仍然不能工作,现在它是固定的
发布于 2022-10-07 12:44:33
因为表达式是不可变的,所以在表达式上使用subs对原始表达式没有任何作用,它只创建一个新的(可能不同的)表达式。因此,expr在did expr.subs(x,y)之后仍然是x的观察结果与此一致。如果你印了expr.subs(x,y),你就会看到y。
另外,由于您的change函数在检查expr值时不返回新表达式,所以它没有改变。
如果您想编写自己的函数,您可以在这方面寻求帮助。如果要用sum替换整数,可以使用subs方法本身:
>>> expr = UnevaluatedExpr(5)*UnevaluatedExpr(10)-UnevaluatedExpr(5)**UnevaluatedExpr(2)
>>> expr.subs(5, UnevaluatedExpr(2)+3)
(3 + 2)*10 - (3 + 2)**2
>>> expr # unchanged unless you do expr = expr.subs(5, UnevaluatedExpr(2)+3)
5*10 - 5**2发布于 2022-10-07 09:59:38
我想你把subs的论点搞错了。以下是你是如何做到的:
expr.subs(UnevaluatedExpr(5), UnevaluatedExpr(3) + UnevaluatedExpr(2))
# out: (2 + 3)*10 - (2 + 3)**2https://stackoverflow.com/questions/73985356
复制相似问题