Matrizes e vetores numéricos em Python: A solução [Dica]
Publicado por João Carlos abreu Junior em 16/09/2009
[ Hits: 58.578 ]
Essa dica mostra como trabalhar de forma eficiente com matrizes numéricas em Python.
A estrutura de dados e o objetivo
Em cada posição do meu vetor preciso guardar 4 números: dois inteiros e dois reais. Vamos denominar esses 4 números como: y, x, valor1, valor2. Onde y e x são meus números inteiros e valor1 e valor2 são meus números reais.
Esse vetor deverá ser ordenado da seguinte forma:
Valor1: Decrescente
Valor2: Crescente
Após alocar toda a memória e preencher com os dados necessários, é preciso ordenar o vetor, como foi explicado inicialmente. Segue abaixo o código devidamente explicado:
A variável índice é um vetor que contém as posições, a variável dados deve ser impressa para que seja vista de forma ordenada.
O código completo, para teste, pode ser obtido em: Utilizando a biblioteca Numpy [Python Script]
Criar uma lista de tuplas onde cada tupla guarda os 4 números citados anteriormente e ordenar a lista com o método sort da mesma. O problema é que o Python consumia toda a memória do computador. Estranhamente o Python só consumia a memória do computador quando eu guardava variáveis na tupla, como no código abaixo:
Se eu guardasse os valores diretamente, como no código da figura abaixo:
Nada de errado acontecia.
Matrizes ou vetores numéricos? Numpy é a solução
A biblioteca Numpy não faz parte do instalador padrão do Python, mas pode ser obtida através do site www.numpy.scipy.org.
Essa biblioteca é altamente eficiente para se trabalhar com vetores e matrizes numéricas. Com a utilização dessa biblioteca o problema acima foi resolvido. Segue abaixo a explicação do código utilizado:
A biblioteca array do Python é melhor para se trabalhar com os vetores e matrizes numéricas. Então agora tentamos criar uma lista de arrays ao invés de uma lista de tuplas.
Armazenando variáveis, o Python novamente consumiu toda a memória do computador, segue abaixo o código utilizado:
Como na 1a. tentativa, armazenando os valores, nenhum problema ocorreu. Segue abaixo o código:
A biblioteca Numpy é altamente eficiente quanto ao uso de memória. Ela também se mostrou muito rápida nas operações com matriz, por exemplo: encontrar uma transposta de uma matriz, transformar matriz em vetor, entre outras coisas. Esse tutorial foi apenas uma introdução à biblioteca Numpy, mostrando como ela foi útil na resolução de um problema real, é altamente recomendado que você leia a documentação da biblioteca.