python - MatrixSymbol 中的 Sympy 下划线以 pretty-print 方式更改外观

标签 python sympy

如果我在变量名中使用下划线生成一个符号矩阵:

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

enter image description here

而在你的第二种情况下,

>>> v_fluid = sp.MatrixSymbol('vfluid',1,3)
>>> v_fluid

enter image description here

此 SymPy 符号在 pretty-print 时由 LaTex 处理。在第一种情况下,您的下划线被作为 LaTex 特殊字符处理,并且您同时为 fluid 和您的数字下标

v_{fluid}_{0, 0}

结果是

enter image description here

在第二种情况下,LaTex 不会被任何下划线混淆,并且下标您的数字

vfluid_{0, 0}

导致这样的符号!

enter image description here

然后,如果您 pprint,则双下标只是按字面处理,这会导致矩阵中出现下划线,而 vfluid 后的单个下划线实际上会下标您的数字。

关于python - MatrixSymbol 中的 Sympy 下划线以 pretty-print 方式更改外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29652282/

相关文章:

python - url django 中渲染的 slugs 不正确

python - python中有matlab中digits()和vpa()函数的对应函数吗?

python - 在 Python SymPy 中设置函数的域

sympy - Sympy 求解的 ODE 不满足给定的初始条件

python - 使用 SymPy 通过给定点构造符号插值样条

python - 为什么不是所有的激活函数都相同?

python - 类型错误 : can only concatenate tuple (not “list” ) to tuple"- Odoo v9

python - 为什么Python的max()函数不准确?

python - 运行 pypi-server 时出现 ValueError : zero length field name in format

python - sympy 中的多元序列扩展