Use o botão abaixo para reportar erros ou dar sugestões.

Cálculo Numérico - Versão Python

A.3 Matrizes


Em Python, temos um ótimo suporte para computação científica com o pacote numpy. Uma matriz A = [ai,j]i,j=1m,n em Python é definida usando-se a seguinte sintaxe:

>>> import numpy as np  
>>> A = np.array([[ a11 , a12 , ... , a1n], [...]. [am1 , am2 , ... , amn]])

Exemplo A.3.1. Defina a matriz:

A = 1 2 3 4 5 6 (A.1)

Solução. Em Python, digitamos:

>>> import numpy as np  
>>> A = np.array([[1,2,3],  
...               [4,5,6]])  
>>> print(A)  
[[1 2 3]  
 [4 5 6]]

A seguinte lista contém uma série de funções que geram matrizes particulares:

numpy.eye      matriz identidade  
numpy.linspace vetor de elementos linearmente espaçados  
numpy.ones     matriz cheia de uns  
numpy.zeros    matriz nula

A.3.1 Obtendo dados de uma matriz


A função numpy.shape retorna o tamanho de uma matriz, por exemplo:

>>> A = np.ones((3,2))  
>>> print(A)  
[[ 1.  1.]  
 [ 1.  1.]  
 [ 1.  1.]]  
>>> nl, nc = np.shape(A)  
>>> print(nl,nc)  
(3, 2)

informando que a matriz A tem três linhas e duas colunas.

Existem vários métodos para acessar os elementos de uma matriz dada A:

  • a matriz inteira acessa-se com a sintaxe:
    A

  • o elemento da i-ésima linha e j-ésima coluna acessa-se usando a sintaxe:
    A[i,j]

  • o bloco formado pelas linhas i1, i2 e pelas colunas j1, j2 obtém-se usando a sintaxe:
    A[i1:i2, j1:j2]

Exemplo A.3.2. Veja as seguintes linhas de comando:

>>> from numpy import random  
>>> A = np.random.random((3,4))  
>>> A  
array([[ 0.39235668,  0.30287204,  0.24379253,  0.98866709],  
       [ 0.72049734,  0.99300252,  0.14232844,  0.25604346],  
       [ 0.61553036,  0.80615392,  0.22418474,  0.13685148]])  
>>> A[2,3]  
0.13685147547025989  
>>> A[1:3,1:4]  
array([[ 0.99300252,  0.14232844,  0.25604346],  
       [ 0.80615392,  0.22418474,  0.13685148]])

Definida uma matriz A em Python, as seguintes sintaxes são bastante úteis:

A[:,:]   toda a matriz  
A[i:j,k] os elementos das linhas i até j (exclusive) da k-ésima coluna  
A[i,j:k] os elementos da i-ésima linha das colunas j até k (exclusive)  
A[i,:]   a i-ésima linha da matriz  
A[:,j]   a j-ésima coluna da matriz

Atenção, os índices em Python iniciam-se em 0. Assim, o comando A[1:3,1:4] retorna o bloco da matriz A compreendido da segunda à terceira linha e da segunda a quarta coluna desta matriz.

Exemplo A.3.3. Veja as seguintes linhas de comando:

>>> B = np.random.random((4,4))  
>>> B  
array([[ 0.94313432,  0.72650883,  0.55487089,  0.18753526],  
       [ 0.02094937,  0.45726099,  0.51925464,  0.8535878 ],  
       [ 0.75948469,  0.95362926,  0.77942318,  0.06464183],  
       [ 0.91243198,  0.22775889,  0.04061536,  0.14908227]])  
>>> aux = np.copy(B[:,2])  
>>> B[:,2] = np.copy(B[:,3])  
>>> B[:,3] = np.copy(aux)  
>>> B  
array([[ 0.94313432,  0.72650883,  0.18753526,  0.55487089],  
       [ 0.02094937,  0.45726099,  0.8535878 ,  0.51925464],  
       [ 0.75948469,  0.95362926,  0.06464183,  0.77942318],  
       [ 0.91243198,  0.22775889,  0.14908227,  0.04061536]])

A.3.2 Operações matriciais e elemento-a-elemento


Em Python com numpy, o operador * opera elemento a elemento. Por exemplo:

>>> A = np.array([[1,2],[2,1]]); print(A)  
[[1 2]  
 [2 1]]  
>>> B = np.array([[2,1],[2,1]]); print(B)  
[[2 1]  
 [2 1]]  
>>> print(A*B)  
[[2 2]  
 [4 1]]

A multiplicação matricial obtemos com:

>>> C = A.dot(B)  
>>> print(C)  
[[6 3]  
 [6 3]]

Aqui, temos as sintaxes análogas entre operações elemento-a-elemento:

+ adição  
- subtração  
* multiplicação  
/ divisão  
** potenciação

Exemplo A.3.4. Veja as seguintes linhas de comando:

>>> A = np.ones((2,2))  
>>> A  
array([[ 1.,  1.],  
       [ 1.,  1.]])  
>>> B = 2 * np.ones((2,2))  
>>> B  
array([[ 2.,  2.],  
       [ 2.,  2.]])  
>>> A*B  
array([[ 2.,  2.],  
       [ 2.,  2.]])  
>>> A.dot(B)  
array([[ 4.,  4.],  
       [ 4.,  4.]])  
>>> A/B  
array([[ 0.5,  0.5],  
       [ 0.5,  0.5]])

Creative Commons License Este texto é disponibilizado nos termos da licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada (CC-BY-SA 3.0). Página gerada em 15/5/2019 às 15:24:50.

Informe erros ou edite você mesmo!