NumPy abreviação para Numerical Python é uma Lib fundamental para quem planeja lidar com computação numérica de alta performance em Python. Ele é a base de muitos outros Módulos e frameworks de alto nível como Pandas, Matplotlib, Scikit-learn, Opencv dentre outros não menos importantes.
É primordial avisar que esse post é apenas uma demonstração básica de como funciona as arrays do NumPy é justamente para pessoas que nunca tiveram contato com essa Lib. Agora se você já teve contato com a mesma antes, provavelmente não lhe acrescentará muita coisa. Mas fique de olho que já tenho alguns posts interessantes sobre o assunto na fila.
NumPy foi pensado para lidar com cálculo vetorial. Isso quer dizer que possui uma série de funcionalidades para lidar com vetores,matrizes e tensores, isso facilita realizar programação funcional e aplicações de funções a todos os elementos de um vetor ou nás diferentes dimensões de um tensor ou matriz.
Sem contar com suas ferramentas para lidar com variáveis aleatórias, Álgebra linear e as integrações com as linguagens C, C++ e Fortran. Em outras palavras, é um pré-requisito para quem planeja lidar com Machine Learning, Análise de dados, Engenharia de dados e computação científica em geral.
Falarei no post de hoje de algumas funções básicas usadas para criar arrays ou np.ndarrays como é definido o nome do objeto no Python.
As arrays do NumPy
As Arrays formam o coração do NumPy. Tudo nessa Lib é destinado simplesmente para lidar com arrays, tanto de uma única dimensão como N dimensionais.
Vamos a um exemplo de como criar uma array em NumPy.
#Vamos importar a Lib da forma mais convencional. In [2]: import numpy as np In [3]:data = [1,2,3,4,5,6] In [4]: arr1 = np.array(data) In [5]: arr1 Out[5]: array([1, 2, 3, 4, 5])
É muito comum criarmos as arrays a partir de listas, mas podemos criar a partir de tuplas ou sets também. E ate mesmo gerá-las com algumas funções específicas.
Elas lembram o objeto list do Python mas são outra coisa. Possui centenas de métodos e atributos para lidar com vetores e matrizes de dados.
Podemos usar outros métodos para criar arrays específicos de acordo com a necessidade.
#.zero() é um método que cria uma array de zeros com o tamanho desejado. In [19]: np.zeros(10) Out[19]: array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) #Podemos criar uma array de duas dimensões também! In [20]: np.zeros((3, 6)) Out[20]: array([[ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0.]]) #Podemos criar arrays vazias, útil caso queira criar novos objetos ou DataFrames #Não é criado apenas arrays vazias elas vem com valores aleatórios as vezes In [21]: np.empty((5,2)) Out [21]: array([[ 0.,0.], [ 0.,0.], [ 0.,0.], [ 0.,0.], [ 0.,0.]]) #.arange é um método muito interessante assim com o range do Python ela cria uma array de 0 a n-1 #nas verções mais atuais do Python o método range cria um generator e não mais uma lista. In [22]: np.arange(15) Out[22]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
Um método interessante é .asarray() quando usamos ele em uma lista comum ele cria uma array porém quando aplicado a uma array ele armazena o mesmo objeto dentro da variável ao invés de criar uma cópia.
In [23]: data = [[1,2],[5,6],[7,2]] #Crio uma array comum In [24]: arr1 = np.array(data) #Faço outra array comum a partir da array antiga In [25]: arr2 = np.array(arr1) #Comparo os dois objetos e retorna False. são instâncias diferentes. In [26]: arr1 is arr2 Out [26]: False #Agora crio um novo objeto com .asarray() In [27]: copy_arr1 = np.asarray(arr1) #Comparo os dois objetos e retorna True são o mesmo objeto. #As alterações que forem feitas em um afetam o outro. In [28]: copy_arr1 is arr1 Out [28]: True #Gostaria de lembrar que o método .asarray tem o mesmo efeito do método .copy #Quando aplicado a uma array do Numpy. #O método .ones() assim como .zeros() cria uma array porem de 1 e 0 respectivamente. In [29]: np.ones(5) Out [29]: array([ 1., 1., 1., 1., 1.]) #O método .ones_like() pega outra array qualquer e a transforma em uma array de 1. #Util para reaproveitar memoria In [30]: arr1 = np.array([[1,2],[5,6],[7,2]]) In [31]: np.ones_like(arr1) Out[31]: array([[1, 1], [1, 1], [1, 1]])
Temos também os métodos .zeros_like() e .empty_like que fazem a mesma coisa que .ones_like() porem com zeros e array vazia respectivamente.
Outro método interessante para quem lida com matrizes é o .eye() que cria uma matriz NxN identidade. Dê uma olhada:
#No caso criei um array 3 por 3 com 1 na diagonal. # Em algebra linear isso é a famosa matriz identidade In [32]: np.eye(3) Out[63]: array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]])
Esse foi o post de hoje dos meus queridos 7 leitores. Se você achou básico, a proposta era justamente essa: apenas uma demonstração das arrays do NumPy para despertar seu interesse nessa lib.
Qualquer dúvida, crítica ou sugestão é só deixar nos comentários que respondo imediatamente. Caso queira uma demonstração do NumPy mais interessante, fiz um post sobre Decision Trees em que utilizei ele.
Segue o link: Decision trees com sklearn parte 1
Se você se interessou e planeja aprender NumPy recomendo fortemente esses dois livros Python Para Análise de Dados: Tratamento de Dados com Pandas, NumPy e IPython e Scipy lecture notes.
Bons estudos.