Você está na página 1de 22

Linguagem e Técnicas de

Programação
Python - Arrays
Professores:

Flávio Mania
Wilton Moreira Ferraz Junior
Arrays

São estruturas de dados semelhantes às listas do


Python, mas não tão flexíveis. Em um array todos os
elementos devem ser de um mesmo tipo, tipicamente
númerico, como int ou float. Além disso, as dimensões
(= shape) de um array não podem ser modificadas.

Em contrapartida, o uso de arrays é muito mais


eficiente e facilita a computação de grandes volumes
de dados numéricos. Isso faz com que arrays sejam
particularmente útil em computação científica.
Arrays

Para trabalhar com arrays em Python vamos utilizar o


módulo NumPy (Numeric Python). O NumPy define a
classe ndarray para encapsular arrays de n
dimensões. Os arrays do NumPy tem tamanho fixo,
assim, para se mudar o tamanho de um ndarray, cria-
se um novo array e o original é removido.
Arrays

Além disso, o NumPy oferece várias funções pré-


compiladas que tornam o processamento de arrays
mais eficiente. Aqui vamos introduzir apenas um
pequeno conjunto desses recursos. Para saber mais
http://ufpr.dl.sourceforge.net/project/numpy/NumPy/1.
10.1/userguide.pdf
Arrays

Para se criar arrays a partir de


listas, podemos usar o módulo
NumPy conforme exemplo.

Lembre-se que, para usarmos um


módulo, precisamos carregá-lo
usando import. No exemplo, o
módulo foi carregado e usamos o
apelido np para acessar os
recursos desse módulo
Arrays
É também possível criar um array
com zeros (0 s), ou uns (1 s), ou
identidade, bastando para isso definir
a dimensão da matriz e o tipo, como
o exemplo.

Observe que o array z de zeros tem


dimensão (2,3) (= 2 por 3) e, por
default, é do tipo float. Já o array u
tem dimensão (3,2) (= 3 por 2) e é do
tipo int. Finalmente, como a matriz
identidade deve ser quadrada, é
necessário fornecer apenas um valor
(no caso 2) e o tipo desejados.
Arrays
Uma outra maneira conveniente para se criar um array a partir
de uma lista unidimensional é redimensionando o array usando
o método reshape() da classe ndarrays conforme exemplo.

Nesse caso, a função range() é utilizada para criar a lista de


números de 0 a 11, que é redimensionada para uma matriz de
dimensão (3,4).
Arrays
Índices
Para acessar um elemento de uma lista de dimensão n é necessário
fornecer o valor de n índices, ou seja, 2 índices para uma matriz
bidimensional, 3 índices para uma matriz tridimensional e assim por diante.

Embora seja possível usar a mesma forma para acessar elementos


de um array, uma forma mais eficiente é separando os valores por
vírgulas, como o exemplo
Arrays
Fatias
Além de ser mais eficiente, o
uso de vírgulas permite formas
de fatiamento mais flexíveis,
como mostrado nos exemplos.

Usando vírgulas, podemos


selecionar todas as linhas de
mat e a coluna de índice 2
usando mat[:,2] (= coluna de
índice 2) e ainda criar uma
matriz contendo as duas últimas
colunas usando mat[:,2:].
Operações com arrays

Apesar da semelhança do tipo ndarrays do NumPy


com as listas de Python para o tratamento de índices
e fatias, o NumPy oferece muito mais recursos que
listas para operação e manipulação de arrays que
facilitam a computação científica.
Operações com arrays

Em ciência da computação, vetorização (vectorization)


é a generalização das operações em escalares a
vetores e matrizes de várias dimensões. Linguagens
de programação que aplicam de maneira transparente
e concisa operação sobre arrays são chamadas de
array programming languages.
Operações com arrays

Em Python com NumPy, para arrays com o mesmo


número de elementos e forma, os símbolos das
operações básicas como *, +, etc, podem ser
utilizadas para calcular um novo array “por elemento”.
Operações com arrays
Operações com arrays
Observe que não basta ter o mesmo número de elementos,
mas a forma (shape) do array também é importante, como
mostra o exemplo a seguir.
Operações entre arrays
de tamanhos distintos

Em muitos casos, é necessário trabalhar com arrays


com um número distinto de elementos, ou de formas
diferentes. Nesse caso, é necessário entender as
regras do NumPy que difundem as informações do
array menor para o array maior.
Operações entre arrays
de tamanhos distintos

O termo difusão (broadcasting) descreve como NumPy


trata arrays de dimensões diferentes em operações
aritméticas. O array menor é “difundido” a uma array
maior para que tenham as mesmas dimensões.
Operações entre arrays
de tamanhos distintos
No caso de um escalar, o valor do escalar é difundido para
todos os elementos do array maior, como no exemplo:
Operações entre arrays
de tamanhos distintos
No caso de arrays com uma das dimensões unitárias (um
array linha ou coluna por exemplo), mas onde as demais
dimensões sejam compatíveis com a do array maior, o array
menor é transmitido para a outra dimensão do array maior.
Operações entre arrays
de tamanhos distintos
Álgebra Linear
O produto de matrizes pode ser calculado usando o método dot
Álgebra Linear
O produto de matrizes pode ser calculado usando o método dot
Outras funções do NumPy

Estatística
Rotinas estatísticas para cálculo de média, variância e desvio
padrão, entre outras, além de funções para vários tipos de
amostragem, inclusive um gerador de números pseudo-aleatórios.

Matemática
Diversas funções matemáticas como sqrt, log, exp, min, max,
somatórias, trigonométricas etc.

Outras
Como funções financeiras, Fast Fourier Transform, polinômios,
ordenação, etc. Dê uma olhada no conjunto de rotinas do NumPy
em http://docs.scipy.org/doc/numpy-dev/reference/routines.html.

Você também pode gostar