Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> #numerical python >>> >>> #o propósito do numpy é facilitar computação numérica, científica e matricial >>> >>> #Numpy disponibiliza duas classes principais: >>> #array: array de qualquer dimensão >>> #matrix: representa matrizes de duas dimensões (linhas e colunas) >>> >>> import numpy as np >>> A = np.matrix( [ [1,2], [3,4] ] ) >>> >>> A matrix([[1, 2], [3, 4]]) >>> print(A) [[1 2] [3 4]] >>> #a variável A aponta para uma matriz de duas linhas e duas colunas >>> >>> type(A) >>> >>> #acessando um elemento da matriz >>> >>> A[0, 1] #acessa o elemento na linha 0 e na coluna 1 2 >>> A[1] #acessa a linha 1 da matriz matrix([[3, 4]]) >>> A[:, 0] #acessa toda a coluna 0 da matriz matrix([[1], [3]]) >>> #a função zeros gera um array de zeros >>> Z = np.zeros( (4,5) ) >>> Z array([[0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]]) >>> M = np.matrix(Z) >>> M matrix([[0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]]) >>> #podemos gerar matrizes de números aleatórios >>> import numpy.random as npr >>> N = np.matrix( npr.randint(-10, 10, (3, 2) ) ) #gera matriz de numeros inteiros aleatorios entre -10 e 10, tendo 3 linhas e 2 colunas >>> N matrix([[-7, -7], [-5, -7], [ 1, -3]]) >>> N = np.matrix( npr.randint(-10, 10, (3, 2) ) ) #gera matriz de numeros inteiros aleatorios entre -10 e 10, tendo 3 linhas e 2 colunas >>> N matrix([[-8, 7], [ 5, 2], [ 2, -6]]) >>> #podemos operar com blocos de matrizes >>> M matrix([[0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]]) >>> N matrix([[-8, 7], [ 5, 2], [ 2, -6]]) >>> M[ 0:3, 2:4 ] = N >>> M matrix([[ 0., 0., -8., 7., 0.], [ 0., 0., 5., 2., 0.], [ 0., 0., 2., -6., 0.], [ 0., 0., 0., 0., 0.]]) >>> #podemos fazer operações diversas com matrizes >>> #criando uma matriz identidade >>> B = np.matrix( np.eye(2,2) ) >>> B matrix([[1., 0.], [0., 1.]]) >>> np.matrix( np.eye(10,10) ) matrix([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 1., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 1., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]]) >>> A matrix([[1, 2], [3, 4]]) >>> B matrix([[1., 0.], [0., 1.]]) >>> #multiplicando a matriz B por um escalar >>> B = 4*B >>> B matrix([[4., 0.], [0., 4.]]) >>> #somando matrizes >>> C = A + B >>> C matrix([[5., 2.], [3., 8.]]) >>> #multiplicando matrizes >>> D = A * B >>> D matrix([[ 4., 8.], [12., 16.]]) >>> #podemos calcular potencia de matrizes >>> E = A**2 #equivale a E = A * A (multiplica a matriz por ela mesma) >>> E matrix([[ 7, 10], [15, 22]]) >>> #podemos calcular a inversa de uma matriz >>> Ainversa = A**-1 >>> Ainversa matrix([[-2. , 1. ], [ 1.5, -0.5]]) >>> A * Ainversa matrix([[1.0000000e+00, 0.0000000e+00], [8.8817842e-16, 1.0000000e+00]]) >>> #podemos calcular a matriz transposta >>> A matrix([[1, 2], [3, 4]]) >>> np.transpose(A) matrix([[1, 3], [2, 4]]) >>> #a função trace que calcula o traço da matriz (a soma dos elementos da diagonal principal) >>> np.trace(A) 5 >>> #podemos concatenar matrizes >>> #por coluna: hstack >>> np.hstack( (A, B) ) matrix([[1., 2., 4., 0.], [3., 4., 0., 4.]]) >>> #concatenando por linhas (vertical): vstack >>> np.vstack( (A,B) ) matrix([[1., 2.], [3., 4.], [4., 0.], [0., 4.]]) >>> #existem funções que se aplicam a todos os elementos de uma matriz >>> np.sqrt(A) matrix([[1. , 1.41421356], [1.73205081, 2. ]]) >>> >>> #podemos fazer coisas bem mirabolantes com o pacote linalg (algebra linear) >>> import numpy.linalg as la >>> help(np) >>> help(la) >>> >>> >>> #calculando determinante de matriz >>> la.det(A) -2.0000000000000004 >>> #calculando o posto de uma matriz >>> la.matrix_rank(A) #calcula o posto de A 2 >>> #calculando autovalores e autovetores >>> autovals, autovets = la.eig(A) >>> autovals array([-0.37228132, 5.37228132]) >>> autovets matrix([[-0.82456484, -0.41597356], [ 0.56576746, -0.90937671]]) >>> #Podempos resolver sistemas lineares >>> b = np.matrix( [ [10], [20] ] ) >>> #resolvendo o sistema Ax = b >>> A matrix([[1, 2], [3, 4]]) >>> b matrix([[10], [20]]) >>> x = la.solve( A, b ) >>> x matrix([[0.], [5.]]) >>> #calculando norma A >>> la.norm(A) 5.477225575051661 >>> la.norm(A, 2) 5.464985704219043