SymPy - Matrizes

Em matemática, uma matriz é uma matriz bidimensional de números, símbolos ou expressões. A teoria da manipulação de matrizes trata da execução de operações aritméticas em objetos de matrizes, sujeita a certas regras.

A transformação linear é uma das aplicações importantes de matrizes. Muitas áreas científicas, especialmente relacionadas à Física, utilizam aplicações relacionadas a matrizes.

O pacote SymPy possui módulo de matrizes que trata do manuseio de matrizes. Inclui a classe Matrix cujo objeto representa uma matriz.

Note: If you want to execute all the snippets in this chapter individually, you need to import the matrix module as shown below −

>>> from sympy.matrices import Matrix

Example

>>> from sympy.matrices import Matrix 
>>> m=Matrix([[1,2,3],[2,3,1]]) 
>>> m
$\displaystyle \left[\begin{matrix}1 & 2 & 3\\2 & 3 & 1\end{matrix}\right]$

Ao executar o comando acima no shell python, a seguinte saída será gerada -

[1 2 3 2 3 1]

Matrix é criada a partir de objetos List de tamanho apropriado. Você também pode obter uma matriz distribuindo itens de lista em um número especificado de linhas e colunas.

>>> M=Matrix(2,3,[10,40,30,2,6,9]) 
>>> M
$\displaystyle \left[\begin{matrix}10 & 40 & 30\\2 & 6 & 9\end{matrix}\right]$

Ao executar o comando acima no shell python, a seguinte saída será gerada -

[10 40 30 2 6 9]

Matrix é um objeto mutável. O módulo de matrizes também fornece a classe ImmutableMatrix para a obtenção de matrizes imutáveis.

Manipulação básica

o shape propriedade do objeto Matrix retorna seu tamanho.

>>> M.shape

A saída para o código acima é a seguinte -

(2,3)

Os métodos row () e col () retornam respectivamente a linha ou coluna do número especificado.

>>> M.row(0)
$\displaystyle \left[\begin{matrix}10 & 40 & 30\end{matrix}\right]$

A saída para o código acima é a seguinte -

[10 40 30]

>>> M.col(1)
$\displaystyle \left[\begin{matrix}40\\6\end{matrix}\right]$

A saída para o código acima é a seguinte -

[40 6]

Use o operador slice do Python para buscar um ou mais itens pertencentes a linha ou coluna.

>>> M.row(1)[1:3]
[6, 9]

A classe Matrix tem os métodos row_del () e col_del () que deleta a linha / coluna especificada da matriz dada -

>>> M=Matrix(2,3,[10,40,30,2,6,9]) 
>>> M.col_del(1) 
>>> M

Ao executar o comando acima no shell python, a seguinte saída será gerada -

Matrix([[10, 30],[ 2, 9]])

Você pode aplicar estilo à saída usando o seguinte comando -

$\displaystyle \left[\begin{matrix}10 & 30\\2 & 9\end{matrix}\right]$

Você obtém a seguinte saída após executar o trecho de código acima -

[10 30 2 9]

>>> M.row_del(0) 
>>> M

$\displaystyle \left[\begin{matrix}2 & 9\end{matrix}\right]$

Você obtém a seguinte saída após executar o trecho de código acima -

[2 9]

Da mesma forma, os métodos row_insert () e col_insert () adicionam linhas ou colunas na linha especificada ou índice de coluna

>>> M1=Matrix([[10,30]]) 
>>> M=M.row_insert(0,M1)
>>> M

$\displaystyle \left[\begin{matrix}10 & 30\\2 & 9\end{matrix}\right]$

Você obtém a seguinte saída após executar o trecho de código acima -

[10 40 30 2 9]

>>> M2=Matrix([40,6]) 
>>> M=M.col_insert(1,M2) 
>>> M

$\displaystyle \left[\begin{matrix}10 & 40 & 30\\2 & 6 & 9\end{matrix}\right]$

Você obtém a seguinte saída após executar o trecho de código acima -

[10 40 30 6 9]

Operaçoes aritimeticas

Operadores usuais +, - e * são definidos para realizar adição, subtração e multiplicação.

>>> M1=Matrix([[1,2,3],[3,2,1]]) 
>>> M2=Matrix([[4,5,6],[6,5,4]]) 
>>> M1+M2

$\displaystyle \left[\begin{matrix}5 & 7 & 9\\9 & 7 & 5\end{matrix}\right]$

Você obtém a seguinte saída após executar o trecho de código acima -

[5 7 9 9 7 5]

>>> M1-M2
$\displaystyle \left[\begin{matrix}-3 & -3 & -3\\-3 & -3 & -3\end{matrix}\right]$

Você obtém a seguinte saída após executar o trecho de código acima -

[- 3 -3 -3 -3 -3 -3]

A multiplicação da matriz só é possível se - O número de colunas da 1ª matriz deve ser igual ao número de linhas da 2ª matriz. - E o resultado terá o mesmo número de linhas da 1ª matriz e o mesmo número de colunas da 2ª matriz.

>>> M1=Matrix([[1,2,3],[3,2,1]]) 
>>> M2=Matrix([[4,5],[6,6],[5,4]]) 
>>> M1*M2
$\displaystyle \left[\begin{matrix}31 & 29\\29 & 31\end{matrix}\right]$

A saída para o código acima é a seguinte -

[31 29 29 31]

>>> M1.T
$\displaystyle \left[\begin{matrix}1 & 3\\2 & 2\\3 & 1\end{matrix}\right]$

A seguinte saída é obtida após a execução do código -

[1 3 2 2 3 1]

Para calcular um determinante da matriz, use o método det (). Um determinante é um valor escalar que pode ser calculado a partir dos elementos de uma matriz quadrada.0

>>> M=Matrix(3,3,[10,20,30,5,8,12,9,6,15])
>>> M
$\displaystyle \left[\begin{matrix}10 & 20 & 30\\5 & 8 & 12\\9 & 6 & 15\end{matrix}\right]$

A saída para o código acima é a seguinte -

[10 20 30 5 8 12 9 6 15]

>>> M.det()

A saída para o código acima é a seguinte -

-120

Construtores de matriz

SymPy fornece muitos tipos especiais de classes de matriz. Por exemplo, matriz de identidade, matriz de todos os zeros e uns, etc. Essas classes são nomeadas como olho, zeros e uns, respectivamente. A matriz de identidade é uma matriz quadrada com elementos que caem na diagonal são definidos como 1, o restante dos elementos são 0.

Example

from sympy.matrices import eye eye(3)

Output

Matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
$\displaystyle \left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{matrix}\right]$

A saída para o código acima é a seguinte -

[1 0 0 0 1 0 0 0 1]

Na matriz de diag, os elementos na diagonal são inicializados de acordo com os argumentos fornecidos.

>>> from sympy.matrices import diag 
>>> diag(1,2,3)

$\displaystyle \left[\begin{matrix}1 & 0 & 0\\0 & 2 & 0\\0 & 0 & 3\end{matrix}\right]$

A saída para o código acima é a seguinte -

[1 0 0 0 2 0 0 0 3]

Todos os elementos na matriz de zeros são inicializados com 0.

>>> from sympy.matrices import zeros 
>>> zeros(2,3)

$\displaystyle \left[\begin{matrix}0 & 0 & 0\\0 & 0 & 0\end{matrix}\right]$

A saída para o código acima é a seguinte -

[0 0 0 0 0 0]

Da mesma forma, uns é uma matriz com todos os elementos definidos como 1.

>>> from sympy.matrices import ones
>>> ones(2,3)

$\displaystyle \left[\begin{matrix}1 & 1 & 1\\1 & 1 & 1\end{matrix}\right]$

A saída para o código acima é a seguinte -

[1 1 1 1 1 1]