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]