MC-102 — Aula 14
Vetores e matrizes

Vetores

Vetor é uma sequencia de numeros de um certo tamanho.

Matrizes

matrizes são estruturas 2D (retangulos ou quadrados) de dados numericos.

a matrix

1  2  3  4 
5  6  7  8
9 10 11 12

pode ser representado como a lista:

mat = [ [1,  2,  3,  4 ], [5,  6,  7,  8,], [9, 10, 11, 12,] ]

uma lista de 3 elementos onde cada elemento é uma lista que representa uma linha da matriz

o numero 7 esta na posicao 3 da segunda linha e portanto é indexado como

mat[1][2]

mat[1] é o segundo elemento da lista mat que é ele mesmo uma lista/linha. o [2] pega o 3o elemento desta linha.

Numpy

numpy é um pacote que implementa uma coisa generica chamada array Um vetor é um array de uma dimensao, uma matriz é um array de 2 dimensões. Arrays podem ter 3 ou mais dimensões.

Um array 3D pode representar valores num espaço 3D, tipo temperatura na sala, ou no oceano…

outras funcoes p/ a criacao de um array

Indexação de arrays

https://numpy.org/doc/stable/reference/arrays.indexing.html

X = np.arange(1000).reshape((10,100)) 
X.shape # 10 linhas 100 colunas

X[2,3] 

veja que é diferente da indexação matriz como lista de listas (X[2][3])

X[0:4,8]
X[:,8]
X[0:4,8:10]
X[1] - 2a linha, todas as colunas

Novas formas de indexação

arr = np.array([3,39,29,12])
lis = [3,39,29,12]

X[3,arr]
X[3,lis]
arr
arr[np.array([True,False,False,True])

e = np.array([True,False,False,True,False,False,True,False,False,True,False])
X[e,8]

Operações em arrays

a = np.array([10,20,30])
b = np.array([1,2,3])
a+b
a*b
a/b
a.dot(b)

np.dot(a,b)
a = np.array([1,2,3])
b = np.array([1,4,3])
a == b

diferente de listas que verificam se as 2 listas sao iguais

[1,2,3] == [1,4,3]

np.all( np.array([1,2,3]) == np.array([1,4,3]) )
a = np.array([1,2,3])
b = np.array([1,4,3])
a > b
np.greater(a,b)

array de booleanos

operações logicas em arrays nao funcionam - use as funçoes do numpy

a = np.array([ True, False, True])
b = np.array([ True, False, False])

a and b

np.logical_and(a,b)

broadcast

os argumentos não precisam ter a mesmas ndim (inclusive atribuição)

a+2
4*X
np.array([1,2,3]) == 1

X % 2 == 0

Por que numpy?

indexação avançada + broadcast ( exemplo)

nao fazer loops explicitos

Rodar no ipython

import numpy as np

def g1(x):
    for i in range(x.shape[0]):
        for j in range(x.shape[1]):
            if x[i,j] < 0.5:
                x[i,j]=0.0
    return x
    
def g2(x):
    x[x<0.5]=0.0
    return x
    
y = np.random.rand(4000,30)
x = np.array(y,copy=True)
%timeit x1 = g1(x)
x = np.array(y,copy=True)
%timeit x2 = g2(x)

x<0.5 é um array 2D booleano que sever para indexar os elementos de x que vao trocar de valor

Funçoes em numpy

Funções elemento por elemento

Funções que agregam varios valores

axis - faz a operação agregação nessa dimensão - sobram as outras

a = np.arange(24).reshape(3,4,2)
a

np.sum(a,axis=0)

np.amax(a,axis=(1,2))

Junta e quebra arrays

https://numpy.org/doc/stable/reference/routines.array-manipulation.html#joining-arrays

Algebra linear

https://numpy.org/doc/stable/reference/routines.linalg.html

I/O

Formato interno para matrizes npy

Texto

csv