NumPy: From Zero to Sidekick
Saiba o básico para utilizar o NumPy!
O Python não foi inicialmente criado para ser uma linguagem numérica e se você vem de outras linguagens já deve ter percebido que as chamadas “listas” em Python são diferentes do padrão de “arrays” que outras linguagens trazem. Entretanto, o Python acabou atraindo atenção da comunidade científica e para superar essas limitações a solução foi a criar packages específicos. O primeiro deles foi um package para matrizes chamado Numeric, que posteriormente teve um concorrente chamado Numarray, até que em 2006 um cara chamado Travis Oliphant unificou a comunidade através de um único package, o NumPy.
O NumPy (Numerical Python) é uma das bibliotecas científicas de Python, utilizada para criação de arrays multidimensionais e realização operações matemáticas. Os arrays do NumPy são mais rápidos e ocupam menos memória em comparação com as listas em Python. Além disso, esses arrays são uniformes, ou seja, diferente das listas neles é possível armazenar apenas dados do mesmo tipo.
Importando o NumPy
Para utilizar esse package, no inicio do arquivo escrevemos o conhecido import numpy as np
, isso diz ao nosso editor que os recursos disponíveis nessa biblioteca serão utilizados ao longo do nosso código.
Criando arrays
Para criar um array utilizamos np.array([valores])
e passamos a sequência numérica.
Para criar um array com apenas uma linha basta passar os valores diretamente dentro dos colchetes [valor1, valor2, ...]
. Se esse array tiver mais de uma linha, devemos abrir um novo par de colchetes para cada linha np.array([[1,2,3,4], [5,6,7,8]])
.
Além disso, pode-se passar mais de uma sequência e criar um array multidimensional. Vejamos o exemplo abaixo:
Criando arrays com range
Podemos também povoar um array usando números dentro de um range específico da forma como já estamos acostumados a usar range, por exemplo: range(n_final)
, range(n_inicial, n_final)
e range(n_inicial, n_final, passo)
. Para o NumPy utilizamos arange()
:
Arrays especiais
Há também a possibilidade de criar alguns arrays diferenciados, por exemplo, apenas com zeros, apenas com um’s ou com números aleatórios.
Para criar um array de zeros utilizamos np.zeros((linhas, colunas))
. Para criar apenas de um’s utilizamos np.ones((linhas, colunas))
. Para números aleatórios utilizamos np.random.random((linhas, colunas))
.
Seguem os exemplos:
Obtendo informações sobre um array
Também é fácil obter algumas informações sobre um array. Para saber quantas dimensões ele possui utilizamos ndim
, para descobrir a forma (quantas linhas por quantas colunas) usamos nshape
. Além disso podemos verificar qual o tamanho de cada elemento em bits usando itemsize
e qual é o tipo de dado com dtype
. Vamos dar uma olhada:
Acessando elementos
Para visualizar elementos específicos utilizamos nome_do_array[index]
ou nome_do_array[index_inicial:index_final]
de forma muito similar ao que já estamos acostumados a fazer com listas convencionais. Para obter um elemento de uma matriz passamos suas coordenadas, nome_da_matriz[linha, coluna]
. Também é possível utilizar :
para obter uma coluna inteira ou uma linha inteira de elementos. Abaixo os exemplos:
Para arrays multidimensionais utilizamos nome_do_array[dimensão, linha, coluna]
:
Modificando a forma de um Array
Para alterar a forma de um array podemos utilizar nome_do_array.reshape(linhas, colunas)
e nome_do_array.resize(linhas, colunas)
. Ao utilizar reshape
mudamos a distribuição dos elementos sem alterar o array original. Por outro lado, o resize
altera o array em si. Vejamos:
Matemática Básica
Também são possíveis operações matemáticas entre arrays e seus elementos com os operadores aritméticos que já estamos acostumados:
Os códigos desse post estão disponíveis no meu repositório do github. Além disso, coloquei os links das fontes utilizadas e do MyBinder para execução e manipulação do código online!
Pra saber como eu fiz pra renderizar as gists do Jupyter, dá uma olhada aqui.