如果我在变量名中使用下划线生成一个符号矩阵:
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 符号在 pretty-print 时由 LaTex 处理。在第一种情况下,您的下划线被作为 LaTex 特殊字符处理,并且您同时为 fluid
和您的数字下标
v_{fluid}_{0, 0}
结果是
在第二种情况下,LaTex 不会被任何下划线混淆,并且仅下标您的数字
vfluid_{0, 0}
导致这样的符号!
然后,如果您 pprint
,则双下标只是按字面处理,这会导致矩阵中出现下划线,而 vfluid
后的单个下划线实际上会下标您的数字。
关于python - MatrixSymbol 中的 Sympy 下划线以 pretty-print 方式更改外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29652282/