我似乎无法在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
有可能吗?
答案 0 :(得分:0)
Sympy以无法永久重新定义的方式设计。但是,您可以使用以下命令在表达式中替换符号。 Here是它的文档。
expr1.subs({x:"foo"}) #for changing only one symbol.
expr2.subs({x:10, y:20}) #for changing both the symbols.
答案 1 :(得分:0)
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]])