MatrixSymbol 中的 Sympy 下划线以漂亮的打印方式更改外观
Sympy underscores in MatrixSymbol change appearance in pretty print
如果我在变量名中使用下划线生成符号矩阵:
import sympy as sp
v_fluid = sp.MatrixSymbol('v_fluid',1,3)
V_fluid = sp.diag(*v_fluid )
sp.pprint(V_fluid )
我获得:
⎡v_fluid_00 0 0 ⎤
⎢ ⎥
⎢ 0 v_fluid_01 0 ⎥
⎢ ⎥
⎣ 0 0 v_fluid_02⎦
但是如果我不使用下划线:
v_fluid = sp.MatrixSymbol('vfluid',1,3)
V_fluid = sp.diag(*v_fluid )
sp.pprint(V_fluid )
IPython 查看器中的输出看起来不同:
⎡vfluid₀₀ 0 0 ⎤
⎢ ⎥
⎢ 0 vfluid₀₁ 0 ⎥
⎢ ⎥
⎣ 0 0 vfluid₀₂⎦
计算似乎没有改变。这种行为只是一个图形问题吗?
这不仅仅是图形问题。回想一下,您传递给 sp.MatrixSymbol
的第一个参数是一个 SymPy 符号。在你的第一种情况下,你通过了它
>>> v_fluid = sp.MatrixSymbol('v_fluid',1,3)
>>> v_fluid
而在你的第二种情况下,
>>> v_fluid = sp.MatrixSymbol('vfluid',1,3)
>>> v_fluid
此 SymPy 符号在漂亮打印时由 LaTex 处理。在第一种情况下,您的下划线被视为 LaTex 特殊字符,并且您下标 fluid
以及您的数字
v_{fluid}_{0, 0}
这导致
在你的第二种情况下,LaTex 不会被任何下划线混淆,只有 下标你的数字
vfluid_{0, 0}
导致这样的符号!
然后如果你 pprint
,双下标只是按字面处理,这会导致你的矩阵中出现下划线,而 vfluid
后面的单个下划线实际上是你的数字下标。
如果我在变量名中使用下划线生成符号矩阵:
import sympy as sp
v_fluid = sp.MatrixSymbol('v_fluid',1,3)
V_fluid = sp.diag(*v_fluid )
sp.pprint(V_fluid )
我获得:
⎡v_fluid_00 0 0 ⎤
⎢ ⎥
⎢ 0 v_fluid_01 0 ⎥
⎢ ⎥
⎣ 0 0 v_fluid_02⎦
但是如果我不使用下划线:
v_fluid = sp.MatrixSymbol('vfluid',1,3)
V_fluid = sp.diag(*v_fluid )
sp.pprint(V_fluid )
IPython 查看器中的输出看起来不同:
⎡vfluid₀₀ 0 0 ⎤
⎢ ⎥
⎢ 0 vfluid₀₁ 0 ⎥
⎢ ⎥
⎣ 0 0 vfluid₀₂⎦
计算似乎没有改变。这种行为只是一个图形问题吗?
这不仅仅是图形问题。回想一下,您传递给 sp.MatrixSymbol
的第一个参数是一个 SymPy 符号。在你的第一种情况下,你通过了它
>>> v_fluid = sp.MatrixSymbol('v_fluid',1,3)
>>> v_fluid
而在你的第二种情况下,
>>> v_fluid = sp.MatrixSymbol('vfluid',1,3)
>>> v_fluid
此 SymPy 符号在漂亮打印时由 LaTex 处理。在第一种情况下,您的下划线被视为 LaTex 特殊字符,并且您下标 fluid
以及您的数字
v_{fluid}_{0, 0}
这导致
在你的第二种情况下,LaTex 不会被任何下划线混淆,只有 下标你的数字
vfluid_{0, 0}
导致这样的符号!
然后如果你 pprint
,双下标只是按字面处理,这会导致你的矩阵中出现下划线,而 vfluid
后面的单个下划线实际上是你的数字下标。