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 后面的单个下划线实际上是你的数字下标。