Prévia do material em texto
Numpy ARRAY E MATRIZES Numpy e Scipy Numpy é um módulo do Python que oferece recursos para manipulação de arrays e matrizes, além funções de álgebra linear Outro módulo usado é o Scipy (Scientific Python) , que extende as funcionalidades do Numpy com funções para minimização, regressão, transformações de Fourier e outras Os módulos Numpy e Scipy podem ser baixados em: http://www.scipy.org/download http://www.scipy.org/download Numpy e Scipy Existem ambientes que já vêm com o módulo Numpy e instalado, como o ambiente de desenvolvimento integrado Spyder Ele pode ser baixado pela iniciativa Anaconda, disponível em: https://www.continuum.io/downloads Spyder também já conta com o Matplotlib, além de Numpy https://www.continuum.io/downloads Numpy e Scipy Numpy e Scipy constituem alternativas ao MATLAB. Apesar de o MATLAB ter um grande número de ferramentas adicionais disponíveis, Numpy tem as seguintes vantagens: Python é uma linguagem mais moderna e completa É gratuito É open source Scipy adiciona ainda mais funcionalidades estilo MATLAB ao Python. Existe ainda o pacote de plotagem Matplotlib, que provê funções de plotagem parecidas com a do MATLAB. Numpy É um pacote que inclui: Classe array Classe matrix Várias funções auxiliares Para importar: import numpy from numpy import * Array A classe Array implementa um arranjo homogêneo mutável, com número arbitrário de elementos Semelhante ao conhecido tipo list do Python, porém: Possui métodos mais poderosos Homogêneo: todos os elementos devem ser do mesmo tipo Para criar um Array a partir de uma lista: >>> lista = [0,1,2,3,4,5,6,7,8] >>> a = numpy.array(lista) >>> print a [0 1 2 3 4 5 6 7 8] Array Para criar um Array a partir de um intervalo: >>> z = numpy.arange(0.0, 4.5, 0.5) >>> print z [0. 0.5 1. 1.5 2. 2.5 3. 3.5 4.] Para criar um Array só de 1’s: >>> y = numpy.ones((2,3)) >>> print y [[1. 1. 1.] [1. 1. 1.]] Array Para criar um Array só de 0’s: >>> x = numpy.zeros((3,2)) >>> print x [[0. 0.] [0. 0.] [0. 0.]] Para acessar elementos do Array: >>> a = numpy.array([0,1,2,3,4,5]) >>> print a[2] 2 Array Para saber o tipo dos elementos do Array: >>> print a.dtype int32 Para saber o formato do Array: >>> a = numpy.array([0,1,2,3,4,5]) >>> print a.shape (6,) Array Percorrendo o Array: >>> a = numpy.array([1,2,3,4,5]) >>> for i in range(a.size): print a[i], 1 2 3 4 5 Para redimensionar um Array: >>> x = numpy.array([0,1,2,3,4,5,6,7,8]) >>> x.shape = 3,3 >>> print x [[0 1 2] [3 4 5] [6 7 8]] OU >>> a = numpy.array([1,2,3,4,5]) >>> for i in a: print i, 1 2 3 4 5 Array Transposta de um Array: >>> x = numpy.array([0,1,2,3,4,5,6,7,8]) >>> x.shape = 3,3 >>> print x [[0 1 2] [3 4 5] [6 7 8]] >>> t = x.transpose() >>> print t [[0 3 6] [1 4 7] [2 5 8]] Array Para “achatar” um Array (colocar em uma dimensão): >>> x = numpy.array([0,1,2,3,4,5,6,7,8]) >>> x.shape = 3,3 >>> print x [[0 1 2] [3 4 5] [6 7 8]] >>> f = x.flatten() >>> print f [0 1 2 3 4 5 6 7 8] Array Para criar arrays a partir de outros arrays usando funções: >>> z = [0. 0.5 1. 1.5 2. 2.5 3. 3.5 4.] >>> c = numpy.cos(z) #Usando a função cosseno >>> print c [1. 0.87758256 0.54030231 0.0707372 -0.41614684 -0.80114362 -0.9899925 -0.93645669 -0.65364362] >>> cos = numpy.round(c,1) #arredonda com 1 casa decimal >>> print cos [1. 0.9 0.5 0.1 -0.4 -0.8 -1. -0.9 -0.7] Array >>> a = numpy.array([0,1,2,3,4,5,6]) >>> print numpy.sqrt(a) #raiz quadrada [0. 1. 1.41421356 1.73205081 2. 2.23606798 2.44948974] >>> print numpy.mod(a,2) #resto da divisão por 2 [0 1 0 1 0 1 0] >>> print numpy.negative(a) #transforma para negativo [0,-1,-2,-3,-4,-5,-6] Outras funções de Array add(x,y) Adiciona argumentos, elemento por elemento subtract(x,y) Subtrai argumentos, elemento por elemento multiply(x,y) Multiplica argumentos, elemento por elemento divide(x,y) Divide argumentos, elemento por elemento power(x,y) Elementos do primeiro array, elevado à potência do segundo array log2(x) Logaritmo na base 2 do array exp(x) Exponencial de todos os elementos do array sin(x) Seno de cada elemento do array tan(x) Tangente de cada elemento do array arctan(x) Arcotangente sinh(x) Seno hiperbólico deg2rad(x) Converte de graus para radianos rad2deg(x) Converte de radianos para graus Outras funções de Array add(x,y) Adiciona argumentos, elemento por elemento subtract(x,y) Subtrai argumentos, elemento por elemento multiply(x,y) Multiplica argumentos, elemento por elemento divide(x,y) Divide argumentos, elemento por elemento power(x,y) Elementos do primeiro array, elevado à potência do segundo array log2(x) Logaritmo na base 2 do array exp(x) Exponencial de todos os elementos do array sin(x) Seno de cada elemento do array tan(x) Tangente de cada elemento do array arctan(x) Arcotangente sinh(x) Seno hiperbólico deg2rad(x) Converte de graus para radianos rad2deg(x) Converte de radianos para graus As funções que recebem ângulo como parâmetro esperam que seja fornecido em radianos. Se você quiser saber o seno de 30º, por exemplo, faça a conversão: >>> numpy.sin(numpy.deg2rad(30)) 0.5 Outras funções de Array greater(x,y) Retorna o valor verdade de (x1 > x2) greater_equal(x,y) Valor verdade de (x1 >= x2) less(x,y) Valor verdade de (x1 < x2) less_equal(x,y) Valor verdade de (x1 <= x2) not_equal(x,y) Valor verdade de (x1 != x2) equal(x,y) Valor verdade de (x1 == x2) maximum(x,y) Retorna o máximo entre cada par de elementos dos arrays minimum(x,y) Retorna o mínimo entre cada par de elementos dos arrays Exercícios 1) Faça um programa que crie um array que representa uma progressão aritmética de 10 elementos, sendo o elemento inicial igual a 1 e razão igual à 3. 2) Faça um programa que crie um array bidimensional 3x3 em que a diagonal principal e a secundária contém 1's e o resto contém 0. 3) Faça um programa que crie três arrays A, B e C de 5 elementos cada, e calcule o array resultante da expressão: A + B - C Exercícios 4) Faça um programa que crie o array V = [2.5 3 5 6.3 7], e calcule o array W que contêm o cubo de cada elemento de V, com 2 casas decimais. 5) Considere os ângulos: [ 0. 30. 60. 90. 120. 150. 180. 210. 240. 270. 300. 330.] - Crie um array com estes ângulos. - Transforme estes ângulos em radianos - Calcule o seno destes ângulos, com 1 casa decimal Matriz Criando uma matriz: >>> m = numpy.matrix([[1,2,3],[4,5,6],[7,8,9]]) >>> print m [[1 2 3] [4 5 6] [7 8 9]] Matriz Para acessar um elemento da Matriz: >>> m = numpy.matrix([[1,2,3],[4,5,6]]) >>> print m[1,2] 6 Para saber o formato da Matriz: >>> print m.shape (2,3) Matriz Percorrendo a Matriz: >>> m = numpy.matrix([[1,2],[3,4]]) >>> l,c = m.shape >>> for i in range(l): for j in range(c): print m[i,j] 1 2 3 4 Matriz Transposta de uma Matriz: >>> m = numpy.matrix([[1,2,3],[4,5,6],[7,8,9]]) >>> tr = m.T >>> print tr [[1 4 7] [2 5 8] [3 6 9]] Matriz Transposta de uma Matriz: >>> m = numpy.matrix([[1,2,3],[4,5,6],[7,8,9]]) >>> tr = m.T >>> print tr [[1 4 7] [2 5 8] [3 6 9]] Atenção: T maiúsculo Matriz Inversa de uma Matriz: >>> m = numpy.matrix([[1,2],[3,4]]) >>> inv = m.I >>> print inv [[-2. 1. ] [ 1.5 -0.5]] Atenção: I maiúsculo Matriz Multiplicação de matrizes: >>> z = numpy.matrix([[1,2,3],[4,5,6],[7,8,9]]) >>> r = numpy.matrix([[3, 2, 1]]) >>> print r*z [[18 24 30]] Linalg Módulo para álgebra linear Para calcular determinante: >>> a = numpy.matrix([[1,2],[3,4]]) >>> print a [[1 2] [3 4]] >>> print numpy.linalg.det(a) -2.0 Linalg Para resolver sistema linear: Suponha o sistema de equações: 3x + y = 9 x + 2y = 8 >>> a = numpy.matrix([[3,1],[1,2]]) >>> b = numpy.array([9,8]) >>> x = numpy.linalg.solve(a,b) >>> print x [ 2. 3.] Linalg Para resolver sistema linear: Suponha o sistema de equações: 3x + y = 9 x + 2y = 8 >>> a = numpy.matrix([[3,1],[1,2]]) >>> b = numpy.array([9,8]) >>> x = numpy.linalg.solve(a,b) >>> print x [ 2. 3.] Valores que acompanham as variáveis Valores ao lado direito do sinal de igual x = 2 y = 3 Exercícios 6) Faça um programa para resolver o seguinte sistema linear: x + 10y - 12z = 120 4x - 2y - 20z = 60 -x + y + 5z = 10 Resposta: [ 340. 50. 60.]