{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# NumPy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "O NumPy é um pacote para realizar cálculos numéricos com facilidade e eficiência. Ele é tradicionalmente importado com o nome `np`, como no comando abaixo." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A principal estrutura de dados do NumPy é o *array*, que representa um array similar aos de C, mas com diversas operações simplificadas, como veremos.\n", "\n", "Uma forma de criar arrays é criando arrays com todos os elementos nulos ou todos os elementos unitários." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.zeros(10)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.zeros(10, dtype=np.int)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.ones(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Outra forma é convertendo uma lista Python em um array." ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [], "source": [ "potencias_10 = np.array([1, 10, 100, 1000, 10000])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Arrays podem ser indexados da mesma forma que listas." ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "100" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "potencias_10[2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Outras formas úteis de criar arrays permitem gerar valores consecutivos. Por exemplo, temos uma generalização do `range` de Python, mas que aceita valores de ponto flutuante:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.arange(10)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3, 4, 5, 6, 7, 8, 9])" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.arange(1, 10)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([1, 3, 5, 7, 9])" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.arange(1, 10, 2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "np.arange(1, 10, 1.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Outra opção similar é especificar o número de intervalos desejados entre o início e o final, ao invés de especificar a separação entre os valores (como acontece no `arange`)." ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linspace(1, 10, 10)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0. , 1.11111111, 2.22222222, 3.33333333,\n", " 4.44444444, 5.55555556, 6.66666667, 7.77777778,\n", " 8.88888889, 10. ])" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linspace(0, 10, 10)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linspace(0, 10, 10+1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Podemos conserguir algumas informações sobre um array acessando alguns campos informativos, como abaixo." ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1, 10, 100, 1000, 10000])" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "potencias_10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Chamamos de shape a descrição do número de elementos em cada dimensão do array." ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(5,)" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "potencias_10.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Arrays podem ser criados com mais do que uma dimensão. Para isso, passamos uma tupla com os tamanhos nas diversas dimensões." ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [], "source": [ "m0 = np.zeros((5, 10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mais tarde podemos consultar o shape para saber o formato do array." ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(5, 10)" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m0.shape" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": true }, "outputs": [], "source": [ "m3 = np.ones((2,2,3))" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[[ 1., 1., 1.],\n", " [ 1., 1., 1.]],\n", "\n", " [[ 1., 1., 1.],\n", " [ 1., 1., 1.]]])" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m3" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(2, 2, 3)" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m3.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Também podemos verificar qual o tipo de cada um dos elementos do array." ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "dtype('float64')" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m3.dtype" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [], "source": [ "zzeros = np.ones(10, dtype=np.complex)" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1.+0.j, 1.+0.j, 1.+0.j, 1.+0.j, 1.+0.j, 1.+0.j, 1.+0.j,\n", " 1.+0.j, 1.+0.j, 1.+0.j])" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zzeros" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "dtype('complex128')" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zzeros.dtype" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "O tamanho de um array é o número total de elementos, considerando todas as dimensões." ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "12" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m3.size" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "potencias_10.size" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Uma das coisas que fazem com que os arrays permitam uma programação simples é que podemos realizar operações algébricas sobre um array, o que significa realizar essas operações sobre cada elemento do array." ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.])" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2 * np.ones(10)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": true }, "outputs": [], "source": [ "dois = 2 * np.ones(10)\n", "meio = 0.5 * np.ones(10)" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5])" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dois - meio" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dois * meio" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 4., 4., 4., 4., 4., 4., 4., 4., 4., 4.])" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dois / meio" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 5., 5., 5., 5., 5., 5., 5., 5., 5., 5.])" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "3 * dois - meio / 0.1 + 4" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ -1., 2., 5., 8., 11., 14., 17., 20., 23., 26.])" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "3 * np.arange(10) - np.ones(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "O NumPy também define diversas funções matemáticas que operam sobre arrays aplicando a função a cada um dos elementos do array." ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1.00000000e+00, 2.71828183e+00, 7.38905610e+00,\n", " 2.00855369e+01, 5.45981500e+01, 1.48413159e+02,\n", " 4.03428793e+02, 1.09663316e+03, 2.98095799e+03,\n", " 8.10308393e+03])" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.exp(np.arange(10))" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2.7182818284590451" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.exp(1)" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([ 0.00000000e+00, 6.42787610e-01, 9.84807753e-01,\n", " 8.66025404e-01, 3.42020143e-01, -3.42020143e-01,\n", " -8.66025404e-01, -9.84807753e-01, -6.42787610e-01,\n", " -2.44929360e-16])" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sin(np.linspace(0, 2*np.pi,10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Também é fornecido um módulo de geração de números pseudo-aleatórios:" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.71844584, 0.17955122, 0.82085157, 0.08282654, 0.71249316,\n", " 0.41415227, 0.99526596, 0.54902252, 0.25519737, 0.64346826])" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.random(10)" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0.12193517, 0.93275868, 0.14238606, 0.99065488],\n", " [ 0.03175839, 0.40818423, 0.91922019, 0.22576668],\n", " [ 0.13936801, 0.45935382, 0.52392021, 0.44102865],\n", " [ 0.61910056, 0.49815433, 0.03153276, 0.98233315]])" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.random((4,4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Algumas funções especiais sobre arrays:" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "10.0" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(np.ones(10))" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "45" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(np.arange(10))" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "362880" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.prod(np.arange(1,10))" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "collapsed": true }, "outputs": [], "source": [ "alea = np.random.random(100)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.0023556637749171383" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.min(alea)" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.99134662238625104" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.max(alea)" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45])" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.cumsum(np.arange(10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vejamos agora algumas formas de indexar arrays." ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "collapsed": true }, "outputs": [], "source": [ "sequencia = np.arange(100)" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sequencia[2]" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3])" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sequencia[1:4]" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,\n", " 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,\n", " 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,\n", " 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,\n", " 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89])" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sequencia[10:-10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Arrays multidimensionais são indexados usando uma tupla como índice." ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "collapsed": true }, "outputs": [], "source": [ "mat = np.array([[1, 2, 3], [10, 20, 30]])" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1, 2, 3],\n", " [10, 20, 30]])" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mat" ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mat[0, 2]" ] }, { "cell_type": "code", "execution_count": 82, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "20" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mat[1, 1]" ] }, { "cell_type": "code", "execution_count": 83, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 3, 30])" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mat[:, 2]" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 1, 2],\n", " [10, 20]])" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mat[:, 0:2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Também podemos fornecer um array de índices:" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ind = np.arange(10, 90, 2)" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42,\n", " 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76,\n", " 78, 80, 82, 84, 86, 88])" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ind" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42,\n", " 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76,\n", " 78, 80, 82, 84, 86, 88])" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sequencia[ind]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ou uma lista de índices (que será convertida para um array)." ] }, { "cell_type": "code", "execution_count": 88, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([4, 7])" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sequencia[[4, 7]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Um fator importante a considerar é que quando indexamos um array, o valor retornado não é uma cópia dos valores do array original (como ocorre no caso de listas), mas sim o que é chamado de uma nova visão dos elementos indexados.\n", "\n", "Isso quer dizer que podemos alterar os elementos indexados diretamente." ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n", " 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,\n", " 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,\n", " 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,\n", " 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,\n", " 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sequencia" ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": true }, "outputs": [], "source": [ "sequencia[ind] = -sequencia[ind]" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -10, 11, -12,\n", " 13, -14, 15, -16, 17, -18, 19, -20, 21, -22, 23, -24, 25,\n", " -26, 27, -28, 29, -30, 31, -32, 33, -34, 35, -36, 37, -38,\n", " 39, -40, 41, -42, 43, -44, 45, -46, 47, -48, 49, -50, 51,\n", " -52, 53, -54, 55, -56, 57, -58, 59, -60, 61, -62, 63, -64,\n", " 65, -66, 67, -68, 69, -70, 71, -72, 73, -74, 75, -76, 77,\n", " -78, 79, -80, 81, -82, 83, -84, 85, -86, 87, -88, 89, 90,\n", " 91, 92, 93, 94, 95, 96, 97, 98, 99])" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sequencia" ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "collapsed": true }, "outputs": [], "source": [ "sequencia[ind] = -1" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, 11, -1, 13, -1, 15, -1,\n", " 17, -1, 19, -1, 21, -1, 23, -1, 25, -1, 27, -1, 29, -1, 31, -1, 33,\n", " -1, 35, -1, 37, -1, 39, -1, 41, -1, 43, -1, 45, -1, 47, -1, 49, -1,\n", " 51, -1, 53, -1, 55, -1, 57, -1, 59, -1, 61, -1, 63, -1, 65, -1, 67,\n", " -1, 69, -1, 71, -1, 73, -1, 75, -1, 77, -1, 79, -1, 81, -1, 83, -1,\n", " 85, -1, 87, -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sequencia" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Podemos também gerar outra visão de um array simplesmente encarando os mesmos valores como se fossem um array de outras dimensões." ] }, { "cell_type": "code", "execution_count": 94, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ret = sequencia.reshape((10, 10))" ] }, { "cell_type": "code", "execution_count": 95, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "100" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ret.size" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(10, 10)" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ret.shape" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", " [-1, 11, -1, 13, -1, 15, -1, 17, -1, 19],\n", " [-1, 21, -1, 23, -1, 25, -1, 27, -1, 29],\n", " [-1, 31, -1, 33, -1, 35, -1, 37, -1, 39],\n", " [-1, 41, -1, 43, -1, 45, -1, 47, -1, 49],\n", " [-1, 51, -1, 53, -1, 55, -1, 57, -1, 59],\n", " [-1, 61, -1, 63, -1, 65, -1, 67, -1, 69],\n", " [-1, 71, -1, 73, -1, 75, -1, 77, -1, 79],\n", " [-1, 81, -1, 83, -1, 85, -1, 87, -1, 89],\n", " [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]])" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ret" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como essa é uma outra visão, se alteramos o array `ret` estamos também alterando o array orginal `sequencia`." ] }, { "cell_type": "code", "execution_count": 98, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ret[9,9] = 9999" ] }, { "cell_type": "code", "execution_count": 99, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", " [ -1, 11, -1, 13, -1, 15, -1, 17, -1, 19],\n", " [ -1, 21, -1, 23, -1, 25, -1, 27, -1, 29],\n", " [ -1, 31, -1, 33, -1, 35, -1, 37, -1, 39],\n", " [ -1, 41, -1, 43, -1, 45, -1, 47, -1, 49],\n", " [ -1, 51, -1, 53, -1, 55, -1, 57, -1, 59],\n", " [ -1, 61, -1, 63, -1, 65, -1, 67, -1, 69],\n", " [ -1, 71, -1, 73, -1, 75, -1, 77, -1, 79],\n", " [ -1, 81, -1, 83, -1, 85, -1, 87, -1, 89],\n", " [ 90, 91, 92, 93, 94, 95, 96, 97, 98, 9999]])" ] }, "execution_count": 99, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ret" ] }, { "cell_type": "code", "execution_count": 100, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1,\n", " 11, -1, 13, -1, 15, -1, 17, -1, 19, -1, 21,\n", " -1, 23, -1, 25, -1, 27, -1, 29, -1, 31, -1,\n", " 33, -1, 35, -1, 37, -1, 39, -1, 41, -1, 43,\n", " -1, 45, -1, 47, -1, 49, -1, 51, -1, 53, -1,\n", " 55, -1, 57, -1, 59, -1, 61, -1, 63, -1, 65,\n", " -1, 67, -1, 69, -1, 71, -1, 73, -1, 75, -1,\n", " 77, -1, 79, -1, 81, -1, 83, -1, 85, -1, 87,\n", " -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,\n", " 9999])" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sequencia" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Podemos também construir um array juntando pedaços de outros arrays." ] }, { "cell_type": "code", "execution_count": 101, "metadata": { "collapsed": true }, "outputs": [], "source": [ "p1 = np.zeros(8)" ] }, { "cell_type": "code", "execution_count": 102, "metadata": { "collapsed": true }, "outputs": [], "source": [ "p2 = np.ones(8)" ] }, { "cell_type": "code", "execution_count": 103, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1.,\n", " 1., 1., 1.])" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.concatenate((p1, p2), axis=0)" ] }, { "cell_type": "code", "execution_count": 104, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 1.],\n", " [ 0., 1.],\n", " [ 0., 1.],\n", " [ 0., 1.],\n", " [ 0., 1.],\n", " [ 0., 1.],\n", " [ 0., 1.],\n", " [ 0., 1.]])" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.concatenate((p1.reshape((8,1)), p2.reshape(8,1)), axis=1)" ] }, { "cell_type": "code", "execution_count": 105, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 0., 0., 0., 0., 0., 0., 0.],\n", " [ 1., 1., 1., 1., 1., 1., 1., 1.]])" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.concatenate((p1.reshape((1,8)), p2.reshape(1,8)), axis=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ou podemos separar um array em diversos pedaços." ] }, { "cell_type": "code", "execution_count": 106, "metadata": { "collapsed": true }, "outputs": [], "source": [ "a, b = np.split(np.arange(20), 2)" ] }, { "cell_type": "code", "execution_count": 107, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a" ] }, { "cell_type": "code", "execution_count": 108, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b" ] } ], "metadata": { "kernelspec": { "display_name": "Python [conda root]", "language": "python", "name": "conda-root-py" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 2 }