Matrix Expressions

The Matrix expression module allows users to write down statements like

>>> from sympy import MatrixSymbol, Matrix
>>> X = MatrixSymbol('X', 3, 3)
>>> Y = MatrixSymbol('Y', 3, 3)
>>> (X.T*X).I*Y
X^-1*X'^-1*Y
>>> Matrix(X)
[X_00, X_01, X_02]
[X_10, X_11, X_12]
[X_20, X_21, X_22]
>>> (X*Y)[1, 2]
X_10*Y_02 + X_11*Y_12 + X_12*Y_22

where X and Y are MatrixSymbol‘s rather than scalar symbols.

Matrix Expressions Core Reference

class sympy.matrices.expressions.MatrixExpr

Matrix Expression Class Matrix Expressions subclass SymPy Expr’s so that MatAdd inherits from Add MatMul inherits from Mul MatPow inherits from Pow

They use _op_priority to gain control with binary operations (+, , -, *) are used

They implement operations specific to Matrix Algebra.

Attributes

is_Identity  
as_explicit()

Returns a dense Matrix with elements represented explicitly

Returns an object of type ImmutableMatrix.

>>> from sympy import Identity
>>> I = Identity(3)
>>> I
I
>>> I.as_explicit()
[1, 0, 0]
[0, 1, 0]
[0, 0, 1]

See also

as_mutable
returns MutableMatrix type
as_mutable()

Returns a dense Matrix with elements represented explicitly

Returns an object of type MutableMatrix.

>>> from sympy import Identity
>>> I = Identity(3)
>>> I
I
>>> I.as_mutable()
[1, 0, 0]
[0, 1, 0]
[0, 0, 1]

See also

as_explicit
returns ImmutableMatrix
equals(other)

Test elementwise equality between matrices, potentially of different types

>>> from sympy import Identity, eye
>>> Identity(3).equals(eye(3))
True
class sympy.matrices.expressions.MatrixSymbol

Symbolic representation of a Matrix object

Creates a SymPy Symbol to represent a Matrix. This matrix has a shape and can be included in Matrix Expressions

>>> from sympy import MatrixSymbol, Identity
>>> A = MatrixSymbol('A', 3, 4) # A 3 by 4 Matrix
>>> B = MatrixSymbol('B', 4, 3) # A 4 by 3 Matrix
>>> A.shape
(3, 4)
>>> 2*A*B + Identity(3)
I + 2*A*B

Attributes

is_Identity  
class sympy.matrices.expressions.MatAdd

A Sum of Matrix Expressions

MatAdd inherits from and operates like SymPy Add

>>> from sympy import MatAdd, MatrixSymbol
>>> A = MatrixSymbol('A', 5, 5)
>>> B = MatrixSymbol('B', 5, 5)
>>> C = MatrixSymbol('C', 5, 5)
>>> MatAdd(A, B, C)
A + B + C

Attributes

is_Identity  
class sympy.matrices.expressions.MatMul

A Product of Matrix Expressions

MatMul inherits from and operates like SymPy Mul

>>> from sympy import MatMul, MatrixSymbol
>>> A = MatrixSymbol('A', 5, 4)
>>> B = MatrixSymbol('B', 4, 3)
>>> C = MatrixSymbol('C', 3, 6)
>>> MatMul(A, B, C)
A*B*C

Attributes

is_Identity  
class sympy.matrices.expressions.MatPow

Attributes

is_Identity  
class sympy.matrices.expressions.Inverse

Matrix Inverse

Represents the Inverse of a matrix expression

Use .I as shorthand

>>> from sympy import MatrixSymbol, Inverse
>>> A = MatrixSymbol('A', 3, 3)
>>> B = MatrixSymbol('B', 3, 3)
>>> Inverse(A)
A^-1
>>> A.I
A^-1
>>> Inverse(A*B)
B^-1*A^-1

Attributes

is_Identity  
class sympy.matrices.expressions.Transpose

Matrix Transpose

Represents the transpose of a matrix expression.

Use .T as shorthand

>>> from sympy import MatrixSymbol, Transpose
>>> A = MatrixSymbol('A', 3, 5)
>>> B = MatrixSymbol('B', 5, 3)
>>> Transpose(A)
A'
>>> A.T
A'
>>> Transpose(A*B)
B'*A'

Attributes

is_Identity  
class sympy.matrices.expressions.Trace

Matrix Trace

Represents the trace of a matrix expression.

>>> from sympy import MatrixSymbol, Trace, eye
>>> A = MatrixSymbol('A', 3, 3)
>>> Trace(A)
Trace(A)
>>> Trace(eye(3))
3
class sympy.matrices.expressions.FunctionMatrix

Represents a Matrix using a function (Lambda)

This class is an alternative to SparseMatrix

>>> from sympy import FunctionMatrix, symbols, Lambda, MatMul, Matrix
>>> i, j = symbols('i,j')
>>> X = FunctionMatrix(3, 3, Lambda((i, j), i + j))
>>> Matrix(X)
[0, 1, 2]
[1, 2, 3]
[2, 3, 4]
>>> Y = FunctionMatrix(1000, 1000, Lambda((i, j), i + j))
>>> isinstance(Y*Y, MatMul) # this is an expression object
True
>>> (Y**2)[10,10] # So this is evaluated lazily
342923500

Attributes

is_Identity  
class sympy.matrices.expressions.Identity

The Matrix Identity I - multiplicative identity

>>> from sympy.matrices import Identity, MatrixSymbol
>>> A = MatrixSymbol('A', 3, 5)
>>> I = Identity(3)
>>> I*A
A
class sympy.matrices.expressions.ZeroMatrix

The Matrix Zero 0 - additive identity

>>> from sympy import MatrixSymbol, ZeroMatrix
>>> A = MatrixSymbol('A', 3, 5)
>>> Z = ZeroMatrix(3, 5)
>>> A+Z
A
>>> Z*A.T
0

Attributes

is_Identity  

Block Matrices

Block matrices allow you to construct larger matrices out of smaller sub-blocks. They can work with MatrixExpr or ImmutableMatrix objects.

class sympy.matrices.expressions.blockmatrix.BlockMatrix[source]

A BlockMatrix is a Matrix composed of other smaller, submatrices

The submatrices are stored in a SymPy Matrix object but accessed as part of a Matrix Expression

>>> from sympy import MatrixSymbol, BlockMatrix, symbols, Identity, ZeroMatrix, block_collapse
>>> n,m,l = symbols('n m l')
>>> X = MatrixSymbol('X', n, n)
>>> Y = MatrixSymbol('Y', m ,m)
>>> Z = MatrixSymbol('Z', n, m)
>>> B = BlockMatrix([[X, Z], [ZeroMatrix(m,n), Y]])
>>> print B
[X, Z]
[0, Y]
>>> C = BlockMatrix([[Identity(n), Z]])
>>> print C
[I, Z]
>>> print block_collapse(C*B)
[X, Z + Z*Y]
class sympy.matrices.expressions.blockmatrix.BlockDiagMatrix[source]

A BlockDiagMatrix is a BlockMatrix with matrices only along the diagonal

>>> from sympy import MatrixSymbol, BlockDiagMatrix, symbols, Identity
>>> n,m,l = symbols('n m l')
>>> X = MatrixSymbol('X', n, n)
>>> Y = MatrixSymbol('Y', m ,m)
>>> BlockDiagMatrix(X, Y)
[X, 0]
[0, Y]
sympy.matrices.expressions.blockmatrix.block_collapse(expr)[source]

Evaluates a block matrix expression

>>> from sympy import MatrixSymbol, BlockMatrix, symbols, Identity, Matrix, ZeroMatrix, block_collapse
>>> n,m,l = symbols('n m l')
>>> X = MatrixSymbol('X', n, n)
>>> Y = MatrixSymbol('Y', m ,m)
>>> Z = MatrixSymbol('Z', n, m)
>>> B = BlockMatrix([[X, Z], [ZeroMatrix(m, n), Y]])
>>> print B
[X, Z]
[0, Y]
>>> C = BlockMatrix([[Identity(n), Z]])
>>> print C
[I, Z]
>>> print block_collapse(C*B)
[X, Z + Z*Y]

Table Of Contents

Previous topic

Matrices (linear algebra)

Next topic

Immutable Matrices

This Page