Enviar um café pro programador

A biblioteca NumPy – Arrays, Vetores, Arrays Multidimensionais e Matrizes

Neste tutorial, vamos conhecer um pouco mais sobre a biblioteca Numpy, a library mais fundamental do mundo da programação científica, computação numérica e até mesmo da análise de dados.

Vamos aprender o que são e para que servem os arrays, vetores, matrizes e arrays multidimensionais.


Sobre a as origens da biblioteca NumPy

Um dos maiores grupos de praticantes de programação, são as pessoas do meio científico.

Então, sempre que surge uma nova linguagem, uma nova ferramenta, um novo programa ou sistemas, não tenha dúvidas: vários físicos, matemáticos, químicos, engenheiros etc, vão dar uma olhada para ver se aquilo pode ser usado no mundo das ciências.

E não foi diferente com o Python. Aquela linguagem bonita, simples e bem direta, encantou os cientistas.

Em 1995, a comunidade já começou a lançar pacotes voltadas para cálculos numéricos, como o Numarray e o Numeric. Depois, esses dois pacotes e diversas outras funções foram agrupadas e em 2006 foi lançada a primeira versão da NumPy library.

Desde então, se tornou a biblioteca mais usada pela comunidade científica do mundo inteiro, para performar operações em arrays com uma eficiência e versatilidade incrível.

Se seus dados e informações podem ser colocados em um array, então você pode fazer tudo e mais um pouco com eles, usando o NumPy.

O core da biblioteca foi escrito em linguagem C, conhecida por ser extremamente robusta, rápida e poderosa.


Arrays e Vetores em Python

Antes de entrar em mais detalhes sobre a NumPy, vamos relembrar o que são arrays, vetores, matrizes...

O que é um Array

Inicialmente, no estudo da programação, vamos definindo variáveis. Por exemplo, uma variável para armazenar sua nota de Cálculo I. Depois, usamos outra variável para armazenar sua nota de Física I.

Veja que, com esses dois dados já podemos calcular a sua média. Mas, provavelmente você tem mais matérias. Então vamos definir mais variáveis para armazenar suas notas de Introdução a Química, Física Experimental, Programação...veja, já temos 5 variáveis, só para suas notas.

Agora imagina que você precise trabalhar com as notas de todas as pessoas da sua sala, uns 40 alunos. Iria precisar de 200 variáveis. E aí? Vai definir, inicializar e trabalhar com cada uma dessas variáveis, individualmente? Sem chance.

E aí que entram os arrays. Array é um tipo de estrutura de dados, é como se fosse um novo tipo de 'variável', que consegue armazenar, de maneira ordenada, diversas variáveis, do mesmo tipo, de uma vez só.

Imagine uma variável como um espaço na memória do seu computador. Um quadradinho. Um array, é um conjunto 'grudado' desses quadradinhos:

Vetor em Python
O array é essa fila de bloquinhos, onde cada bloco pode armazenar uma variável. Cada bloco é definido por um índice. O primeiro é sempre 0.
Na imagem acima, temos um array de 6 elementos: o elemento 0, o elemento 1, ...e o elemento 5.

Ou seja, em vez de criar 200 variáveis para armazenar notas (variável do tipo float - números decimais), apenas use um array do tipo float de tamanho 200.

Veja bem, uma variável comum armazena apenas um tipo de informação (um número inteiro, ou um decimal, ou uma string, ou um valor lógico etc). Sempre uma coisa apenas.

Então, um array é uma variável especial que pode armazenar várias informações de uma vez só.


O que é uma matriz ou array multidimensional

No exemplo anterior, das 5 notas dos 40 alunos, teríamos um array de 200 elementos. Ou seja, 1 linha e 200 colunas. É um array de apenas uma dimensão.

Agora imagina que o coordenador do seu curso tenha 4 turmas iguais a sua. Ele ia precisar de 200 variáveis para armazenar as notas da primeira turma, mais 200 para a da segunda turma, mais 200 para a terceira e para a quarta.

Em vez de um array com uma dimensão, de uma linha, seria interessante ele ter um array com 4 linhas. Assim, cada linha representaria uma turma.

Temos então um array multidimensional, do tipo 4 x 200, ou seja, 4 linhas e 200 colunas.

Matrizes em NumPy

Na imagem acima, temos um array multidimensional do tipo 3x3, 3 linhas e 3 colunas.
É um array 2D (duas dimensões), onde cada linha é um array 1D (de uma dimensão).

Isso te lembra algo, do ensino médio ou de álgebra linear? Sim, amigos. É uma matriz.


O que é um vetor

Ou seja, arrays podem armazenar diversas informações, e em vários formatos (shapes) e dimensões. Eles possuem no mínimo uma linha e uma coluna (array com um elemento só).

Mas podem ter diversas linhas e diversas colunas, como em uma matriz. Mas veja, uma matriz é um elemento bidimensional. Podemos ter arrays com mais dimensões, inclusive.
Array de Matrizes em NumPy

No exemplo acima, temos 3 matrizes. Cada matriz é do tipo 4x4, e cada elemento dessa matriz é uma lista. É um array multidimensional, de 3 dimensões, do tipo 3x4x4

Já um vetor (vector) é nada mais que um array, mas sempre de uma dimensão apenas. Que se assemelham muito com as listas do Python, que já estudamos vastamente aqui em nosso curso.


Diferença entre lista e vetor

As listas são estrutura de dados heterogêneas, ou seja, você pode criar uma lista com um número inteiro, seguido de um caractere, depois um float, um texto etc.
Você pode agrupar todo tipo de dado que quiser, em uma lista do Python.

Já os arrays, que estudaremos em Computação Científica e Data Science, devem sempre armazenar elementos do mesmo tipo. Ou seja, arrays são homogêneos.

Outra característica, é que os arrays tem tamanhos fixos, definidos no momento de sua criação. Se precisarmos mudar, vamos ter que criar outro array.

Já as listas são dinâmicas, você pode aumentar e reduzir seu tamanho sempre que desejar. São mais flexíveis, porém isso tem seu preço computacional, são mais lentas.

Por conta dessas características mais específicas, os arrays são bem mais rápidos e eficientes, consumindo menos memória e necessitando menos capacidade computacional. Portanto, não é de se estranhar terem sido escolhidos como a base da computação numérica no NumPy


O que é possível fazer com o NumPy

Agora que já entramos em detalhes mais específicos sobre arrays, vetores e matrizes, vamos ver o que é possível fazer com arrays.

Basicamente, vamos aprender a manipular e processar arrays.

Sabe nossa matriz, com as notas? Podemos descobrir a média de cada aluno, de cada turma. Ou podemos descobrir quais foram as médias dele em cada matéria.

Com base nisso, podemos dizer quem tirou acima de 7.0 e passou direto, quem tirou entre 4.0 e 7.0 e vai pra recuperação, e os que reprovaram direto.

E qual turma foi a melhor? Ora, manipulando os arrays para calcular a média de cada sala (lembra que cada linha representa uma turma? Ué, tira a média dos dados de cada linha da matriz).

Podemos 'quebrar' o array multidimensional em outros menores, somente com as notas de cada matéria ou de cada turma.

Podemos também adicionar mais uma linha nesse array, com os dados de uma nova turma. Mas, lembra que dissemos que os arrays tem tamanhos fixos? Como adicionar os dados de mais uma turma?

Nesse caso, criamos uma matriz 5x200, copiamos os dados da matriz antiga 4x200 para esta e em seguida inserimos as informações da quinta linha. Prontinho, um novo array multidimensional.

Isso são apenas algumas operações básicas. Podemos ir bem mais além, e fazer tudo de Álgebra Linear, e até cálculos da transformada de Fourier, em cima destes arrays.


ndarray - O coração da biblioteca NumPy

Em nossa apostila e livro de Programação Científica em Python, falamos sobre os objetos da classe ndarray da NumPy, que são a base de funcionamento dessa biblioteca, que possuem informações cruciais para podermos entender melhor como trabalhar com os arrays para propósitos científicos.

No próximo tutorial, vamos aprender como criar e inicializar arrays dos mais diversos tipos de dados.

Nenhum comentário:

Postar um comentário