问题描述
我似乎无法在SymPy文档中找到所需的内容:基本上,我想做的是重新定义符号,以便它在每个表达式中都发生变化。
像这样:
from sympy import *
x, y = symbols("x y")
expr1 = 2*x + y
expr2 = x**2 + 2*y
x.redefine("foo")
print(expr1, expr2)
x.redefine(2)
print(expr1, expr2)
输出:
2*foo + y, foo**2 + 2*y
4 + y, 4 + 2*y
可能吗?
1楼
Sympy的设计方式使其无法永久重新定义。 但是,您可以使用以下命令在表达式中替换符号。 是它的文档。
expr1.subs({x:"foo"}) #for changing only one symbol.
expr2.subs({x:10, y:20}) #for changing both the symbols.
2楼
SymPy表达式是不可变的 :它们永远不会改变。 因此,不可能有隐式修改所有预先存在的表达式的全局开关。
为了处理多个表达式替换,可以使用循环,列表理解或应用subs
的矩阵。
例子:
expressions = [2*x + y, x**2 + 2*y, x - y/2]
print([expr.subs(x, 3) for expr in expressions])
mat = Matrix(expressions)
print(mat.subs(x, 3))
打印:
[y + 6, 2*y + 9, -y/2 + 3]
Matrix([[y + 6], [2*y + 9], [-y/2 + 3]])