【发布时间】:2018-06-05 07:41:16
【问题描述】:
据我了解,str 将 SymPy 表达式转换为字符串,sympify 将字符串转换为 SymPy 表达式。因此,我希望以下内容成立(为了合理的表达)。
>>> sy.sympify(str(expr)) == expr
True
我试过这个,对于简单的例子来说确实是这样(例如,expr = x+y)。但是,当我尝试使用以下表达式时,它不起作用:
import sympy as sy
a = sy.symbols("a")
A = sy.Matrix(3,3, a)
c0,c1,c2 = sy.symbols("c0 c1 c2", positive = True)
c1*c2**2*a(0, 1)**2*a(1, 2)*a(2, 2) - c1*c2**2*a(0, 1)**2*a(2, 2)**2 - c1*c2**2*a(0, 1)*a(0, 2)*a(1, 1)*a(2, 2) + c1*c2**2*a(0, 1)*a(0, 2)*a(2, 1)*a(2, 2) - c1*c2**2*a(0, 1)*a(1, 1)*a(1, 2)*a(2, 2) + c1*c2**2*a(0, 1)*a(1, 1)*a(2, 2)**2 + c1*c2**2*a(0, 2)*a(1, 1)**2*a(2, 2) - c1*c2**2*a(0, 2)*a(1, 1)*a(2, 1)*a(2, 2) - c1*a(0, 0)**2*a(1, 1)*a(2, 1) + c1*a(0, 0)**2*a(2, 1)**2 + c1*a(0, 0)*a(0, 1)*a(1, 1)*a(2, 0) - c1*a(0, 0)*a(0, 1)*a(2, 0)*a(2, 1) + c1*a(0, 0)*a(1, 0)*a(1, 1)*a(2, 1) - c1*a(0, 0)*a(1, 0)*a(2, 1)**2 - c1*a(0, 0)*a(1, 1)**2*a(2, 0) + c1*a(0, 0)*a(1, 1)*a(2, 0)*a(2, 1) - c2**2*a(0, 0)*a(0, 1)*a(1, 2)*a(2, 2) + c2**2*a(0, 0)*a(0, 1)*a(2, 2)**2 + c2**2*a(0, 0)*a(0, 2)*a(1, 1)*a(2, 2) - c2**2*a(0, 0)*a(0, 2)*a(2, 1)*a(2, 2) + c2**2*a(0, 1)*a(1, 0)*a(1, 2)*a(2, 2) - c2**2*a(0, 1)*a(1, 0)*a(2, 2)**2 - c2**2*a(0, 2)*a(1, 0)*a(1, 1)*a(2, 2) + c2**2*a(0, 2)*a(1, 0)*a(2, 1)*a(2, 2) + c2*a(0, 0)**2*a(1, 2)*a(2, 1) - c2*a(0, 0)**2*a(2, 1)*a(2, 2) - c2*a(0, 0)*a(0, 1)*a(1, 2)*a(2, 0) + c2*a(0, 0)*a(0, 1)*a(2, 0)*a(2, 2) - c2*a(0, 0)*a(1, 0)*a(1, 2)*a(2, 1) + c2*a(0, 0)*a(1, 0)*a(2, 1)*a(2, 2) + c2*a(0, 0)*a(1, 1)*a(1, 2)*a(2, 0) - c2*a(0, 0)*a(1, 1)*a(2, 0)*a(2, 2)
谁能告诉我为什么它不适用于这个表达式?
PS:我知道我应该放一个最小的工作示例,但我只是没有找到表达式的哪个部分导致了问题。
【问题讨论】:
-
Say your expr = sy.sympify("c1*c2**2*a(0, 1)..........") #A Sympy object now if you perform sy.sympify(str(expr)) == expr 它会返回 True 我做对了吗?
-
@NishantPatel 是的,在这一步之后它是正确的。但是我第一次转换它不是。
标签: python type-conversion sympy