当符号是标量时,在 sympy 输出中抑制符号的转置
Suppress the transpose of a symbol in sympy output when the symbol is a scalar
我正在尝试使用 sympy 在 python 中进行一些符号计算。因此,我定义了一些标量和矩阵符号。但是,控制台中的打印输出看起来很难看,我希望它更紧凑。更具体地说,我有一个标量符号 dt
,它被插入到矩阵 Fd
中。如果我打印 Fd
的转置,包含 dt
的条目将打印为 transpose(dt)
。这是我的代码:
#!/usr/bin/python
from sympy import *
dt = Symbol('dt')
A = MatrixSymbol('A',3,3)
B = MatrixSymbol('B',3,3)
C = MatrixSymbol('C',3,3)
D = MatrixSymbol('D',3,3)
E = MatrixSymbol('E',3,3)
F = MatrixSymbol('F',3,3)
Ct = MatrixSymbol('Ct',3,3)
I = Identity(3)
O = ZeroMatrix(3,3 )
Fd = BlockMatrix([[I, dt*I, A, B, -Ct*(dt*dt)/2], [O, I, C, D, -Ct*dt], [O, O, E, F, O], [O, O, O, I, O], [O, O, O, O, I]])
print "======================="
print "Fd = "
print Fd
print "======================="
Fdt = Fd.T
print "======================="
print "Fdt = "
print Fdt
print "======================="
这是输出:
=======================
Fd =
Matrix([
[I, dt*I, A, B, (-dt**2/2)*Ct],
[0, I, C, D, (-dt)*Ct],
[0, 0, E, F, 0],
[0, 0, 0, I, 0],
[0, 0, 0, 0, I]])
=======================
=======================
Fdt =
Matrix([
[ I, 0, 0, 0, 0],
[ (dt*I)', I, 0, 0, 0],
[ A', C', E', 0, 0],
[ B', D', F', I, 0],
[(-transpose(dt)**2/2)*Ct', (-transpose(dt))*Ct', 0, 0, I]])
=======================
我想要一个更紧凑的输出(因为我会做更多的矩阵乘法),其中 dt
实际上被识别为标量符号(因此不打印转置)。有人知道怎么做吗?
确实,不知道通用的 sympy 对象是否等于它的转置。如果您希望 dt 被视为实数或复数标量,请将其声明为:
dt = Symbol('dt', real=True)
或
dt = Symbol('dt', complex=True)
然后你将在输出中得到 dt
而不是 transpose(dt)
。
参考:assumptions
我正在尝试使用 sympy 在 python 中进行一些符号计算。因此,我定义了一些标量和矩阵符号。但是,控制台中的打印输出看起来很难看,我希望它更紧凑。更具体地说,我有一个标量符号 dt
,它被插入到矩阵 Fd
中。如果我打印 Fd
的转置,包含 dt
的条目将打印为 transpose(dt)
。这是我的代码:
#!/usr/bin/python
from sympy import *
dt = Symbol('dt')
A = MatrixSymbol('A',3,3)
B = MatrixSymbol('B',3,3)
C = MatrixSymbol('C',3,3)
D = MatrixSymbol('D',3,3)
E = MatrixSymbol('E',3,3)
F = MatrixSymbol('F',3,3)
Ct = MatrixSymbol('Ct',3,3)
I = Identity(3)
O = ZeroMatrix(3,3 )
Fd = BlockMatrix([[I, dt*I, A, B, -Ct*(dt*dt)/2], [O, I, C, D, -Ct*dt], [O, O, E, F, O], [O, O, O, I, O], [O, O, O, O, I]])
print "======================="
print "Fd = "
print Fd
print "======================="
Fdt = Fd.T
print "======================="
print "Fdt = "
print Fdt
print "======================="
这是输出:
=======================
Fd =
Matrix([
[I, dt*I, A, B, (-dt**2/2)*Ct],
[0, I, C, D, (-dt)*Ct],
[0, 0, E, F, 0],
[0, 0, 0, I, 0],
[0, 0, 0, 0, I]])
=======================
=======================
Fdt =
Matrix([
[ I, 0, 0, 0, 0],
[ (dt*I)', I, 0, 0, 0],
[ A', C', E', 0, 0],
[ B', D', F', I, 0],
[(-transpose(dt)**2/2)*Ct', (-transpose(dt))*Ct', 0, 0, I]])
=======================
我想要一个更紧凑的输出(因为我会做更多的矩阵乘法),其中 dt
实际上被识别为标量符号(因此不打印转置)。有人知道怎么做吗?
确实,不知道通用的 sympy 对象是否等于它的转置。如果您希望 dt 被视为实数或复数标量,请将其声明为:
dt = Symbol('dt', real=True)
或
dt = Symbol('dt', complex=True)
然后你将在输出中得到 dt
而不是 transpose(dt)
。
参考:assumptions