Nesta seção, vamos explorar a NumPy (Numerical Python), biblioteca para tratamento numérico de dados. Ela é extensivamente utilizada nos mais diversos campos da ciência e da engenharia. Aqui, vamos nos restringir a introduzir algumas de suas ferramentas para a computação matricial.
Usualmente, a biblioteca é importada como segue
Um numpy.array é uma tabela de valores (vetor, matriz ou multidimensional) e contém informação sobre os dados brutos, indexação e como interpretá-los. Os elementos são todos do mesmo tipo (diferente de uma lista Python), referenciados pela propriedade dtype. A indexação dos elementos pode ser feita por um tuple de inteiros não negativos, por booleanos, por outro numpy.array ou por números inteiros. O ndim de um numpy.array é seu número de dimensões (chamadas de axes1111endnote: 11axes, do inglês, plural de axis, eixo.). O numpy.ndarray.shape é um tuple de inteiros que fornece seu tamanho (número de elementos) em cada dimensão. Sua inicialização pode ser feita usando-se listas simples ou encadeadas. Por exemplo,
temos um numpy.array de números inteiros com quatro elementos dispostos em um único axis (eixo). Podemos interpretá-lo como uma representação de um vetor linha ou coluna, i.e.
| (28) | 
vetor coluna ou vetor linha.
Outro exemplo,
temos um numpy.array de números decimais (float) dispostos em um arranjo com dois axes (eixos). O primeiro axis tem tamanho e o segundo tem tamanho . Ou seja, podemos interpretá-lo como uma matriz de duas linhas e três colunas. Podemos fazer sua representação algébrica como
| (29) | 
Use numpy.array para alocar:
o vetor
| (30) | 
a matriz
| (31) | 
O NumPy conta com úteis funções de inicialização de numpy.array. Vejam algumas das mais frequentes:
numpy.zeros: inicializa um numpy.array com todos seus elementos iguais a zero.
numpy.ones: inicializa um numpy.array com todos seus elementos iguais a .
numpy.empty: inicializa um numpy.array sem alocar valores para seus elementos1212endnote: 12Atenção! No momento da alocação, os valores dos elementos serão dinâmicos conforme “lixo” da memória..
numpy.arange: inicializa um numpy.array com uma sequência de elementos1313endnote: 13Similar à função Python range..
numpy.linspace(a, b[, num=n]): inicializa um numpy.array como uma sequência de elementos que começa em a, termina em b (incluídos) e contém n elementos igualmente espaçados.
Construa um numpy.array para alocar uma partição uniforme com pontos do intervalo . Ou seja, um arranjo , de elementos , com passo .
Outras duas funções importantes no tratamento de arrays são:
numpy.reshape: permite a alteração da forma de um numpy.array.
O numpy.reshape também permite a utilização de um coringa -1 que será dinamicamente determinado de forma obter-se uma estrutura adequada. Por exemplo,
numpy.transpose: computa a transposta de uma matriz.
numpy.concatenate: concatena arrays.
Aloque o seguinte vetor como um numpy.array
| (33) | 
Então, use o método numpy.reshape para, a partir de b, alocar a matriz
| (34) | 
como um numpy.array.
Tendo em vista que
| (35) | 
é uma matriz ortogonal1414endnote: 14 é dita matriz ortogonal, quando ., compute .
Considere o seguinte sistema de equações
| (36) | ||||
Use numpy.array para alocar:
a matriz de coeficientes deste sistema.
o vetor dos termos constantes deste sistema.
a matriz estendida deste sistema.
Os operadores aritméticos disponível no Python atuam elemento-a-elemento nos numpy.arrays. Por exemplo,
O NumPy também conta com várias funções matemáticas elementares que operam elemento-a-elemento em arrays. Por exemplo,
Compute os valores da função cosseno para os elementos do vetor
| (37) | 
O numpy conta com um módulo de álgebra linear, usualmente importado com
Um vetor podem ser alocado usando um numpy.array de um eixo (dimensão). Por exemplo,
| (38) | |||
| (39) | 
podem ser alocados com
e
Aloque cada um dos seguintes vetores como um numpy.array:
Dados dois vetores
| (40) | |||
| (41) | 
define-se o produto escalar por
| (42) | 
Com o NumPy, podemos computá-lo com a função hlnumpy.dot. Por exemplo,
A norma de um vetor é definida por
| (43) | 
O NumPy conta com o método numpy.linalg.norm para computá-la. Por exemplo,
Faça um código para computar o produto escalar sendo
| (44) | |||
| (45) | 
Uma matriz pode ser alocada como um numpy.array de dois eixos (dimensões). Por exemplo, as matrizes
| (46) | |||
| (47) | 
podem ser alocadas como segue
e
Como já vimos, o NumPy conta com operadores elemento-a-elemento que podem ser utilizados na álgebra envolvendo arrays, logo também aplicáveis a matrizes (consulte a Subseção 4.1.3). Na sequência, vamos introduzir outras operações próprias deste tipo de objeto.
Aloque cada uma das seguintes matrizes como um numpy.array:
| (48) | 
Seja
Determine o formato (shape) dos seguintes arrays:
A[:,0]
A[:,0:1]
A[1:3,0]
A[1:3,0:1]
A[1:3,0:2]
Além das inicializações de arrays já estudadas na Subseção 4.1.1, temos mais algumas que são particularmente úteis no caso de matrizes.
numpy.eye(n): retorna a matriz identidade .
numpy.diag: extrai a diagonal ou constrói um numpy.array diagonal.
Aloque a matriz dos coeficientes e o vetor dos termos constantes do seguinte sistema de equações
| (49) | ||||
onde , , , n=5.
A multiplicação da matriz pela matriz é a matriz tal que
| (50) | 
O numpy tem a função numpy.matmul para computar a multiplicação de matrizes. Por exemplo, a multiplicação das matrizes dadas em (46) e (47), computamos
É importante notar que numpy.matmul(A,B) é a multiplicação de matrizes, enquanto que * consiste na multiplicação elemento a elemento. Alternativamente a numpy.matmul(A,B) pode-se usar A @ B.
Aloque as matrizes
| (51) | |||
| (52) | |||
| (53) | 
Então, se existirem, compute e forneça as dimensões das seguintes matrizes
O numpy tem a função numpy.ndarray.trace para computar o traço de uma matriz (soma dos elementos de sua diagonal). Por exemplo,
Já, o determinante é fornecido no módulo numpy.linalg. Por exemplo,
Compute a solução do seguinte sistema de equações
| (54) | ||||
pelo método de Cramer1515endnote: 15Gabriel Cramer, 1704 - 1752, matemático suíço. Fonte: Wikipédia: Gabriel Cramer..
O posto (rank) de uma matriz é o número de linhas ou colunas linearmente independentes. O numpy conta com a função numpy.linalg.matrix_rank para computá-lo. Por exemplo,
O método numpy.linalg.inv pode ser usado para computar a inversa de uma matriz full rank. Por exemplo,
Compute, se possível, a matriz inversa de cada uma das seguintes matrizes
| (55) | |||
| (56) | 
Verifique suas respostas.
Um auto-par de uma matriz , um escalar chamado de autovalor e é um vetor chamado de autovetor, é tal que
| (57) | 
O numpy tem a função numpy.linalg.eig para computar os auto-pares de uma matriz. Por exemplo,
Observamos que a função retorna um tuple de numpy.arrays, sendo que o primeiro contém os autovalores (repetidos conforme suas multiplicidades) e o segundo item é a matriz dos autovetores (dispostos nas colunas).
Compute os auto-pares da matriz
| (58) | 
Então, verifique se, de fato, para cada auto-par computado.
Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.