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 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 array ou por números inteiros. O rank de um array é seu número de dimensões (chamadas de axes88endnote: 8Do inglês, plural de axis, eixo.). O 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 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 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) |
O NumPy conta com úteis funções de inicialização de array. Vejam algumas das mais frequentes:
np.zeros(): inicializa um array com todos seus elementos iguais a zero.
np.ones(): inicializa um array com todos seus elementos iguais a .
np.empty(): inicializa um array sem alocar valores para seus elementos99endnote: 9Atenção! Os valores dos elementos serão dinâmicos conforme “lixo” da memória..
np.arange(): inicializa um array com uma sequência de elementos1010endnote: 10Similar a função Python range..
np.linspace(a, b[, num=n]): inicializa um 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.
Outras duas funções importantes no tratamento de arrays são:
arr.reshape(): permite a alteração da forma de um array.
O arr.reshape() também permite a utilização de um coringa -1 que será dinamicamente determinado de forma obter-se uma estrutura adequada. Por exemplo,
arr.transpose(): computa a transposta de uma matriz.
np.concatenate(): concatena arrays.
Os operadores aritméticos disponível no Python atuam elemento-a-elemento nos 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,
O NumPy contém um série de outras funções práticas para a manipulação de arrays. Consulte NumPy: the absolute basics for beginners.
O NumPy conta com um módulo de álgebra linear
Um vetor podem ser representado usando um array de um eixo (dimensão) ou um com dois eixos, caso se queira diferenciá-lo entre um vetor linha ou coluna. Por exemplo, os vetores
(30) | |||
(31) |
podem ser alocados com
Caso queira-se que siga um arranjo em coluna, pode-se modificado como segue
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 vetores (consulte a Subseção 5.1.3). Vamos, aqui, introduzir outras operações próprias deste tipo de objeto.
Aloque cada um dos seguintes vetores como um NumPy array:
Dados dois vetores,
(32) | |||
(33) |
define-se o produto escalar por
(34) |
Com o NumPy, podemos computá-lo com a função np.dot(). Por exemplo,
A norma (euclidiana) de um vetor é definida por
(35) |
O NumPy conta com a função np.linalg.norm() para computá-la. Por exemplo,
Faça um código para computar o produto escalar sendo
(36) | |||
(37) |
Uma matriz pode ser alocada como um NumPy array de dois eixos (dimensões). Por exemplo, as matrizes
(40) | |||
(44) |
podem ser alocadas como segue
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 5.1.3). Vamos, aqui, introduzir outras operações próprias deste tipo de objeto.
Aloque cada uma das seguintes matrizes como um Numpy array:
(45) |
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 5.1.1, temos mais algumas que são particularmente úteis no caso de matrizes.
np.eye(n): retorna a matriz identidade .
np.diag(v): retorna uma matriz diagonal formada pela list v.
Aloque a matriz escalar , sendo e para .
A multiplicação da matriz pela matriz é a matriz tal que
(46) |
O NumPy tem a função np.matmul() para computar a multiplicação de matrizes. Por exemplo, a multiplicação das matrizes dadas em (40) e (44), computamos
É importante notar que np.matmul(A,B) é a multiplicação de matrizes, enquanto que * consiste na multiplicação elemento a elemento. Alternativamente a np.matmul(A,B) pode-se usar A @ B.
Aloque as matrizes
(50) | |||
(54) | |||
(57) |
Então, se existirem, compute e forneça as dimensões das seguintes matrizes
O NumPy tem a função arr.trace() para computar o traço de uma matriz (soma dos elementos de sua diagonal). Por exemplo,
Já, o determinante é fornecido no módulo np.linalg. Por exemplo,
Compute e verifique os traços e os determinantes das seguintes matrizes
(60) | |||
(64) |
O rank de uma matriz é o número de linhas ou colunas linearmente independentes. O NumPy conta com a função matrix_rank() para computá-lo. Por exemplo,
A inversa de uma matriz full rank pode ser computada com a função np.linalg.inv(). Por exemplo,
Compute, se possível, a matriz inversa de cada uma das seguintes matrizes
(67) | |||
(71) |
Verifique suas respostas.
Um auto-par , um escalar chamado de autovalor e é um vetor chamado de autovetor, é tal que
(72) |
O NumPy tem a função np.linalg.eig() para computar os auto-pares de uma matriz. Por exemplo,
Observamos que a função uma dupla, sendo o primeiro item um array contendo os autovalores (repetidos conforme suas multiplicidades) e o segundo item é a matriz dos autovetores, onde estes são suas colunas.
Compute os auto-pares da matriz
(73) |
Então, verifique se, de fato, para cada auto-par computado.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a Política de Use de Dados para mais informações. Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!