{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# <font color='blue'>Data Science Academy - Python Fundamentos - Capítulo 8</font>\n",
    "\n",
    "## Download: http://github.com/dsacademybr"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### NumPy"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Para importar numpy, utilize: \n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "Você também pode utilizar: \n",
    "from numpy import *  . Isso evitará a utilização de np., mas este comando importará todos os módulos do NumPy."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Para atualizar o NumPy, abra o prompt de comando e digite: pip install numpy -U"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Importando o NumPy\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'1.14.3'"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.__version__"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Criando Arrays"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on built-in function array in module numpy.core.multiarray:\n",
      "\n",
      "array(...)\n",
      "    array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)\n",
      "    \n",
      "    Create an array.\n",
      "    \n",
      "    Parameters\n",
      "    ----------\n",
      "    object : array_like\n",
      "        An array, any object exposing the array interface, an object whose\n",
      "        __array__ method returns an array, or any (nested) sequence.\n",
      "    dtype : data-type, optional\n",
      "        The desired data-type for the array.  If not given, then the type will\n",
      "        be determined as the minimum type required to hold the objects in the\n",
      "        sequence.  This argument can only be used to 'upcast' the array.  For\n",
      "        downcasting, use the .astype(t) method.\n",
      "    copy : bool, optional\n",
      "        If true (default), then the object is copied.  Otherwise, a copy will\n",
      "        only be made if __array__ returns a copy, if obj is a nested sequence,\n",
      "        or if a copy is needed to satisfy any of the other requirements\n",
      "        (`dtype`, `order`, etc.).\n",
      "    order : {'K', 'A', 'C', 'F'}, optional\n",
      "        Specify the memory layout of the array. If object is not an array, the\n",
      "        newly created array will be in C order (row major) unless 'F' is\n",
      "        specified, in which case it will be in Fortran order (column major).\n",
      "        If object is an array the following holds.\n",
      "    \n",
      "        ===== ========= ===================================================\n",
      "        order  no copy                     copy=True\n",
      "        ===== ========= ===================================================\n",
      "        'K'   unchanged F & C order preserved, otherwise most similar order\n",
      "        'A'   unchanged F order if input is F and not C, otherwise C order\n",
      "        'C'   C order   C order\n",
      "        'F'   F order   F order\n",
      "        ===== ========= ===================================================\n",
      "    \n",
      "        When ``copy=False`` and a copy is made for other reasons, the result is\n",
      "        the same as if ``copy=True``, with some exceptions for `A`, see the\n",
      "        Notes section. The default order is 'K'.\n",
      "    subok : bool, optional\n",
      "        If True, then sub-classes will be passed-through, otherwise\n",
      "        the returned array will be forced to be a base-class array (default).\n",
      "    ndmin : int, optional\n",
      "        Specifies the minimum number of dimensions that the resulting\n",
      "        array should have.  Ones will be pre-pended to the shape as\n",
      "        needed to meet this requirement.\n",
      "    \n",
      "    Returns\n",
      "    -------\n",
      "    out : ndarray\n",
      "        An array object satisfying the specified requirements.\n",
      "    \n",
      "    See Also\n",
      "    --------\n",
      "    empty, empty_like, zeros, zeros_like, ones, ones_like, full, full_like\n",
      "    \n",
      "    Notes\n",
      "    -----\n",
      "    When order is 'A' and `object` is an array in neither 'C' nor 'F' order,\n",
      "    and a copy is forced by a change in dtype, then the order of the result is\n",
      "    not necessarily 'C' as expected. This is likely a bug.\n",
      "    \n",
      "    Examples\n",
      "    --------\n",
      "    >>> np.array([1, 2, 3])\n",
      "    array([1, 2, 3])\n",
      "    \n",
      "    Upcasting:\n",
      "    \n",
      "    >>> np.array([1, 2, 3.0])\n",
      "    array([ 1.,  2.,  3.])\n",
      "    \n",
      "    More than one dimension:\n",
      "    \n",
      "    >>> np.array([[1, 2], [3, 4]])\n",
      "    array([[1, 2],\n",
      "           [3, 4]])\n",
      "    \n",
      "    Minimum dimensions 2:\n",
      "    \n",
      "    >>> np.array([1, 2, 3], ndmin=2)\n",
      "    array([[1, 2, 3]])\n",
      "    \n",
      "    Type provided:\n",
      "    \n",
      "    >>> np.array([1, 2, 3], dtype=complex)\n",
      "    array([ 1.+0.j,  2.+0.j,  3.+0.j])\n",
      "    \n",
      "    Data-type consisting of more than one element:\n",
      "    \n",
      "    >>> x = np.array([(1,2),(3,4)],dtype=[('a','<i4'),('b','<i4')])\n",
      "    >>> x['a']\n",
      "    array([1, 3])\n",
      "    \n",
      "    Creating an array from sub-classes:\n",
      "    \n",
      "    >>> np.array(np.mat('1 2; 3 4'))\n",
      "    array([[1, 2],\n",
      "           [3, 4]])\n",
      "    \n",
      "    >>> np.array(np.mat('1 2; 3 4'), subok=True)\n",
      "    matrix([[1, 2],\n",
      "            [3, 4]])\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Help\n",
    "help(np.array)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Array criado a partir de uma lista:\n",
    "vetor1 = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 1 2 3 4 5 6 7 8]\n"
     ]
    }
   ],
   "source": [
    "print(vetor1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "numpy.ndarray"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Um objeto do tipo ndarray é um recipiente multidimensional de itens do mesmo tipo e tamanho.\n",
    "type(vetor1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  1,  3,  6, 10, 15, 21, 28, 36])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Usando métodos do array NumPy\n",
    "vetor1.cumsum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Criando uma lista. Perceba como listas e arrays são objetos diferentes, com diferentes propriedades\n",
    "lst = [0, 1, 2, 3, 4, 5, 6, 7, 8]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0, 1, 2, 3, 4, 5, 6, 7, 8]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lst"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "list"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(lst)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Imprimindo na tela um elemento específico no array\n",
    "vetor1[0] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Alterando um elemento do array\n",
    "vetor1[0] = 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[100   1   2   3   4   5   6   7   8]\n"
     ]
    }
   ],
   "source": [
    "print(vetor1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "invalid literal for int() with base 10: 'Novo elemento'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-14-7ecc71e33a97>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;31m# Não é possível incluir elemento de outro tipo\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mvetor1\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'Novo elemento'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mValueError\u001b[0m: invalid literal for int() with base 10: 'Novo elemento'"
     ]
    }
   ],
   "source": [
    "# Não é possível incluir elemento de outro tipo\n",
    "vetor1[0] = 'Novo elemento'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(9,)\n"
     ]
    }
   ],
   "source": [
    "# Verificando o formato do array\n",
    "print(vetor1.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Funções NumPy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# A função arange cria um vetor contendo uma progressão aritmética a partir de um intervalo - start, stop, step\n",
    "vetor2 = np.arange(0., 4.5, .5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.  0.5 1.  1.5 2.  2.5 3.  3.5 4. ]\n"
     ]
    }
   ],
   "source": [
    "print(vetor2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "numpy.ndarray"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Verificando o tipo do objeto\n",
    "type(vetor2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(9,)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Formato do array\n",
    "np.shape(vetor2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "float64\n"
     ]
    }
   ],
   "source": [
    "print (vetor2.dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.   1.25 1.5  1.75 2.   2.25 2.5  2.75 3.   3.25 3.5  3.75 4.   4.25\n",
      " 4.5  4.75 5.   5.25 5.5  5.75 6.   6.25 6.5  6.75 7.   7.25 7.5  7.75\n",
      " 8.   8.25 8.5  8.75 9.   9.25 9.5  9.75]\n"
     ]
    }
   ],
   "source": [
    "x = np.arange(1, 10, 0.25)\n",
    "print(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n"
     ]
    }
   ],
   "source": [
    "print(np.zeros(10))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Retorna 1 nas posições em diagonal e 0 no restante\n",
    "z = np.eye(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1., 0., 0.],\n",
       "       [0., 1., 0.],\n",
       "       [0., 0., 1.]])"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "z"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Os valores passados como parâmetro, formam uma diagonal\n",
    "d = np.diag(np.array([1, 2, 3, 4]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 0, 0, 0],\n",
       "       [0, 2, 0, 0],\n",
       "       [0, 0, 3, 0],\n",
       "       [0, 0, 0, 4]])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Array de números complexos\n",
    "c = np.array([1+2j, 3+4j, 5+6*1j])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.+2.j, 3.+4.j, 5.+6.j])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Array de valores booleanos\n",
    "b = np.array([True, False, False, True])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True, False, False,  True])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Array de strings\n",
    "s = np.array(['Python', 'R', 'Julia'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['Python', 'R', 'Julia'], dtype='<U6')"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.        ,  0.20408163,  0.40816327,  0.6122449 ,  0.81632653,\n",
       "        1.02040816,  1.2244898 ,  1.42857143,  1.63265306,  1.83673469,\n",
       "        2.04081633,  2.24489796,  2.44897959,  2.65306122,  2.85714286,\n",
       "        3.06122449,  3.26530612,  3.46938776,  3.67346939,  3.87755102,\n",
       "        4.08163265,  4.28571429,  4.48979592,  4.69387755,  4.89795918,\n",
       "        5.10204082,  5.30612245,  5.51020408,  5.71428571,  5.91836735,\n",
       "        6.12244898,  6.32653061,  6.53061224,  6.73469388,  6.93877551,\n",
       "        7.14285714,  7.34693878,  7.55102041,  7.75510204,  7.95918367,\n",
       "        8.16326531,  8.36734694,  8.57142857,  8.7755102 ,  8.97959184,\n",
       "        9.18367347,  9.3877551 ,  9.59183673,  9.79591837, 10.        ])"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# O método linspace (linearly spaced vector) retorna um número de \n",
    "# valores igualmente distribuídos no intervalo especificado \n",
    "np.linspace(0, 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0.          0.71428571  1.42857143  2.14285714  2.85714286  3.57142857\n",
      "  4.28571429  5.          5.71428571  6.42857143  7.14285714  7.85714286\n",
      "  8.57142857  9.28571429 10.        ]\n"
     ]
    }
   ],
   "source": [
    "print(np.linspace(0, 10, 15))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.00000000e+00 3.59381366e+00 1.29154967e+01 4.64158883e+01\n",
      " 1.66810054e+02 5.99484250e+02 2.15443469e+03 7.74263683e+03\n",
      " 2.78255940e+04 1.00000000e+05]\n"
     ]
    }
   ],
   "source": [
    "print(np.logspace(0, 5, 10))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Criando Matrizes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Criando uma matriz\n",
    "matriz = np.array([[1,2,3],[4,5,6]]) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1 2 3]\n",
      " [4 5 6]]\n"
     ]
    }
   ],
   "source": [
    "print(matriz)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2, 3)\n"
     ]
    }
   ],
   "source": [
    "print(matriz.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Criando uma matriz 2x3 apenas com números \"1\"\n",
    "matriz1 = np.ones((2,3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1. 1. 1.]\n",
      " [1. 1. 1.]]\n"
     ]
    }
   ],
   "source": [
    "print(matriz1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Criando uma matriz a partir de uma lista de listas\n",
    "lista = [[13,81,22], [0, 34, 59], [21, 48, 94]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# A função matrix cria uma matria a partir de uma sequência\n",
    "matriz2 = np.matrix(lista)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[13, 81, 22],\n",
       "        [ 0, 34, 59],\n",
       "        [21, 48, 94]])"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "matriz2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "numpy.matrixlib.defmatrix.matrix"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(matriz2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3, 3)"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Formato da matriz\n",
    "np.shape(matriz2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "matriz2.size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "int64\n"
     ]
    }
   ],
   "source": [
    "print(matriz2.dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "matriz2.itemsize"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "72"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "matriz2.nbytes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "48\n"
     ]
    }
   ],
   "source": [
    "print(matriz2[2,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Alterando um elemento da matriz\n",
    "matriz2[1,0] = 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[ 13,  81,  22],\n",
       "        [100,  34,  59],\n",
       "        [ 21,  48,  94]])"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "matriz2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "int64 float64 float64\n"
     ]
    }
   ],
   "source": [
    "x = np.array([1, 2])  # NumPy decide o tipo dos dados\n",
    "y = np.array([1.0, 2.0])  # NumPy decide o tipo dos dados\n",
    "z = np.array([1, 2], dtype=np.float64)  # Forçamos um tipo de dado em particular\n",
    "\n",
    "print (x.dtype, y.dtype, z.dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "matriz3 = np.array([[24, 76], [35, 89]], dtype=float)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[24., 76.],\n",
       "       [35., 89.]])"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "matriz3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "matriz3.itemsize"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "32"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "matriz3.nbytes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "matriz3.ndim"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "89.0"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "matriz3[1,1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "matriz3[1,1] = 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 24.,  76.],\n",
       "       [ 35., 100.]])"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "matriz3"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Usando o Método random() do NumPy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.32876755 0.8059542  0.38401033 0.96814204 0.242465   0.30801586\n",
      " 0.26278155 0.92680311 0.10689803 0.62445356]\n"
     ]
    }
   ],
   "source": [
    "print(np.random.rand(10))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.83974807 0.55953056 0.70762925 0.96989638 0.20978129 0.4878879\n",
      " 0.47990909 0.07467143 0.3638612  0.44397199]\n"
     ]
    }
   ],
   "source": [
    "print(np.random.rand(10))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAADcxJREFUeJzt3H+s3fVdx/Hna9zhZD/kRy+ktuhl\nSacjJAZyQ5hL5lwXA8xQ/gADca4jjU3mnHMsCuofGP0H/MVcsmzWgevMZCAutpnoQjoIaqTxMiYD\nKqEyLJVK7xTwB9EN9/aP82Vp2G3v6fmec0/Pp89H0pzv93s+3+/3/em5ffV7P9/v+aSqkCS16zXT\nLkCSNFkGvSQ1zqCXpMYZ9JLUOINekhpn0EtS4wx6SWqcQS9JjTPoJalxc9MuAGDdunW1sLAw7TIk\naaY89NBD36iq+dXanRBBv7CwwNLS0rTLkKSZkuSfh2nn0I0kNc6gl6TGGfSS1DiDXpIaZ9BLUuMM\neklqnEEvSY0z6CWpcQa9JDXuhPhmrCQBLNz4F1M579M3v2cq510rXtFLUuMMeklqnEEvSY0z6CWp\ncQa9JDXOoJekxhn0ktQ4g16SGmfQS1LjDHpJapxBL0mNM+glqXEGvSQ1zqCXpMYZ9JLUOOej78G5\ns9s3rc8Ypvc5T7PPmgyv6CWpcQa9JDXOoJekxs38GL3jiZJ0bKte0Se5PcnhJI8ese3MJPcmebJ7\nPaPbniQfT7I/ySNJLppk8ZKk1Q0zdPMZ4NJXbbsR2FNVm4A93TrAZcCm7s924JPjKVOSNKpVh26q\n6oEkC6/avAV4Z7e8E7gfuKHb/tmqKuDBJKcnWV9Vh8ZVsE5ODtFJoxv1Zuw5r4R393p2t30D8MwR\n7Q522yRJUzLup26ywrZasWGyPclSkqXl5eUxlyFJesWoQf9ckvUA3evhbvtB4Nwj2m0Enl3pAFW1\no6oWq2pxfn5+xDIkSasZNeh3A1u75a3AriO2v697+uYS4EXH5yVpula9GZvkDgY3XtclOQjcBNwM\n3JVkG3AAuLprfg9wObAfeAm4bgI1S5KOwzBP3Vx7lLc2r9C2gA/2LUqSND5OgSBJjZv5KRC0tnye\nXZo9XtFLUuMMeklqnEM3M8jhE0nHwyt6SWqcQS9JjTPoJalxBr0kNc6gl6TGGfSS1DiDXpIaZ9BL\nUuMMeklqnEEvSY1zCgTpBOVUFxoXr+glqXEGvSQ1zqCXpMYZ9JLUOINekhrnUzeSTnrTfMLp6Zvf\nM/FzeEUvSY0z6CWpcQa9JDXOoJekxhn0ktQ4g16SGtcr6JN8JMljSR5NckeS1yU5L8neJE8muTPJ\nqeMqVpJ0/EYO+iQbgF8AFqvqAuAU4BrgFuDWqtoEPA9sG0ehkqTR9B26mQO+N8kccBpwCHgXcHf3\n/k7gyp7nkCT1MHLQV9W/AL8DHGAQ8C8CDwEvVNXLXbODwIaV9k+yPclSkqXl5eVRy5AkraLP0M0Z\nwBbgPOD7gdcDl63QtFbav6p2VNViVS3Oz8+PWoYkaRV9hm7eDXy9qpar6lvAF4AfBU7vhnIANgLP\n9qxRktRDn6A/AFyS5LQkATYDjwP3AVd1bbYCu/qVKEnqo88Y/V4GN12/AnytO9YO4Abg+iT7gbOA\n28ZQpyRpRL2mKa6qm4CbXrX5KeDiPseVJI2P34yVpMYZ9JLUOINekhpn0EtS4wx6SWqcQS9JjTPo\nJalxBr0kNc6gl6TGGfSS1DiDXpIaZ9BLUuMMeklqnEEvSY0z6CWpcQa9JDXOoJekxhn0ktQ4g16S\nGmfQS1LjDHpJapxBL0mNM+glqXEGvSQ1zqCXpMYZ9JLUOINekhrXK+iTnJ7k7iT/mGRfkrclOTPJ\nvUme7F7PGFexkqTj1/eK/veBv6qqHwZ+BNgH3AjsqapNwJ5uXZI0JSMHfZI3Ae8AbgOoqm9W1QvA\nFmBn12wncGXfIiVJo+tzRf9mYBn4oyQPJ/l0ktcD51TVIYDu9ewx1ClJGlGfoJ8DLgI+WVUXAv/N\ncQzTJNmeZCnJ0vLyco8yJEnH0ifoDwIHq2pvt343g+B/Lsl6gO718Eo7V9WOqlqsqsX5+fkeZUiS\njmXkoK+qfwWeSfJD3abNwOPAbmBrt20rsKtXhZKkXuZ67v8h4HNJTgWeAq5j8J/HXUm2AQeAq3ue\nQ5LUQ6+gr6qvAosrvLW5z3ElSePjN2MlqXEGvSQ1zqCXpMYZ9JLUOINekhpn0EtS4wx6SWqcQS9J\njTPoJalxBr0kNc6gl6TGGfSS1DiDXpIaZ9BLUuMMeklqnEEvSY0z6CWpcQa9JDXOoJekxhn0ktQ4\ng16SGmfQS1LjDHpJapxBL0mNM+glqXEGvSQ1zqCXpMb1DvokpyR5OMkXu/XzkuxN8mSSO5Oc2r9M\nSdKoxnFF/2Fg3xHrtwC3VtUm4Hlg2xjOIUkaUa+gT7IReA/w6W49wLuAu7smO4Er+5xDktRP3yv6\njwG/DHy7Wz8LeKGqXu7WDwIbep5DktTDyEGf5CeBw1X10JGbV2haR9l/e5KlJEvLy8ujliFJWkWf\nK/q3A1ckeRr4PIMhm48BpyeZ69psBJ5daeeq2lFVi1W1OD8/36MMSdKxjBz0VfUrVbWxqhaAa4Av\nV9VPA/cBV3XNtgK7elcpSRrZJJ6jvwG4Psl+BmP2t03gHJKkIc2t3mR1VXU/cH+3/BRw8TiOK0nq\nz2/GSlLjDHpJapxBL0mNM+glqXEGvSQ1zqCXpMYZ9JLUOINekhpn0EtS4wx6SWqcQS9JjTPoJalx\nBr0kNc6gl6TGGfSS1DiDXpIaZ9BLUuMMeklqnEEvSY0z6CWpcQa9JDXOoJekxhn0ktQ4g16SGmfQ\nS1LjDHpJapxBL0mNM+glqXEjB32Sc5Pcl2RfkseSfLjbfmaSe5M82b2eMb5yJUnHq88V/cvAR6vq\nrcAlwAeTnA/cCOypqk3Anm5dkjQlIwd9VR2qqq90y/8J7AM2AFuAnV2zncCVfYuUJI1uLGP0SRaA\nC4G9wDlVdQgG/xkAZx9ln+1JlpIsLS8vj6MMSdIKegd9kjcAfwb8YlX9x7D7VdWOqlqsqsX5+fm+\nZUiSjqJX0Cd5LYOQ/1xVfaHb/FyS9d3764HD/UqUJPXR56mbALcB+6rq9454azewtVveCuwavTxJ\nUl9zPfZ9O/AzwNeSfLXb9qvAzcBdSbYBB4Cr+5UoSepj5KCvqr8BcpS3N496XEnSePnNWElqnEEv\nSY0z6CWpcQa9JDXOoJekxhn0ktQ4g16SGmfQS1LjDHpJapxBL0mNM+glqXEGvSQ1zqCXpMYZ9JLU\nOINekhpn0EtS4wx6SWqcQS9JjTPoJalxBr0kNc6gl6TGGfSS1DiDXpIaZ9BLUuMMeklqnEEvSY0z\n6CWpcRMJ+iSXJnkiyf4kN07iHJKk4Yw96JOcAnwCuAw4H7g2yfnjPo8kaTiTuKK/GNhfVU9V1TeB\nzwNbJnAeSdIQJhH0G4Bnjlg/2G2TJE3B3ASOmRW21Xc1SrYD27vV/0ryxIjnWwd8Y8R9Z5V9PjnY\n55NAbgFG7/cPDtNoEkF/EDj3iPWNwLOvblRVO4AdfU+WZKmqFvseZ5bY55ODfT55TLrfkxi6+Xtg\nU5LzkpwKXAPsnsB5JElDGPsVfVW9nOTngS8BpwC3V9Vj4z6PJGk4kxi6oaruAe6ZxLFX0Hv4ZwbZ\n55ODfT55TLTfqfqu+6SSpIY4BYIkNW4mgn61KRWSfE+SO7v39yZZWPsqx2uIPl+f5PEkjyTZk2So\nx6xOdMNOn5HkqiSVZOaf0Bimz0l+qvu8H0vyJ2td47gN8fP9A0nuS/Jw9zN++TTqHKcktyc5nOTR\no7yfJB/v/k4eSXLR2E5eVSf0HwY3dP8JeDNwKvAPwPmvavNzwKe65WuAO6dd9xr0+ceB07rlD8x6\nn4ftd9fujcADwIPA4rTrXoPPehPwMHBGt372tOtegz7vAD7QLZ8PPD3tusfQ73cAFwGPHuX9y4G/\nZPBdpEuAveM69yxc0Q8zpcIWYGe3fDewOclKX9yaFav2uaruq6qXutUHGXxfYdYNO33GbwK/BfzP\nWhY3IcP0+WeBT1TV8wBVdXiNaxy3YfpcwJu65e9jhe/izJqqegD492M02QJ8tgYeBE5Psn4c556F\noB9mSoXvtKmql4EXgbPWpLrJON5pJLYxuBKYdav2O8mFwLlV9cW1LGyChvms3wK8JcnfJnkwyaVr\nVt1kDNPnXwfem+Qggyf4PrQ2pU3VxKaPmcjjlWM2zJQKQ027MEOG7k+S9wKLwI9NtKK1ccx+J3kN\ncCvw/rUqaA0M81nPMRi+eSeD39z+OskFVfXChGublGH6fC3wmar63SRvA/646/O3J1/e1Ewsx2bh\nin6YKRW+0ybJHINf9Y71K9KJbqhpJJK8G/g14Iqq+t81qm2SVuv3G4ELgPuTPM1gHHP3jN+QHfbn\ne1dVfauqvg48wSD4Z9Uwfd4G3AVQVX8HvI7BfDAtG+rf/ShmIeiHmVJhN7C1W74K+HJ1dzdm1Kp9\n7oYw/oBByM/6mO0rjtnvqnqxqtZV1UJVLTC4N3FFVS1Np9yxGObn+88Z3HwnyToGQzlPrWmV4zVM\nnw8AmwGSvJVB0C+vaZVrbzfwvu7pm0uAF6vq0DgOfMIP3dRRplRI8hvAUlXtBm5j8KvdfgZX8tdM\nr+L+huzzbwNvAP60u+98oKqumFrRYzBkv5syZJ+/BPxEkseB/wN+qar+bXpV9zNknz8K/GGSjzAY\nvnj/jF+8keQOBsNv67p7DzcBrwWoqk8xuBdxObAfeAm4bmznnvG/O0nSKmZh6EaS1INBL0mNM+gl\nqXEGvSQ1zqCXpMYZ9JLUOINekhpn0EtS4/4ffVRIaFiDKv8AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1102ba7f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.show((plt.hist(np.random.rand(1000))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[-0.22911957 -0.82305328  2.00337749  0.41001026 -0.82809627]\n",
      " [ 2.33185302 -0.13344758 -0.56499447 -0.36810252  0.3048597 ]\n",
      " [ 0.54069696  0.52974186  0.75901069  0.31220585  1.82403205]\n",
      " [ 0.30703907  0.00894393  0.46768762  1.13357679 -0.01140446]\n",
      " [-0.26418087 -0.61113705 -0.12890487 -0.47011605 -1.36438349]]\n"
     ]
    }
   ],
   "source": [
    "print(np.random.randn(5,5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10f2c1d68>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.show(plt.hist(np.random.randn(1000)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.colorbar.Colorbar at 0x110540b00>"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11039b470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "imagem = np.random.rand(30, 30)\n",
    "plt.imshow(imagem, cmap = plt.cm.hot)    \n",
    "plt.colorbar()    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Operações com datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import os\n",
    "filename = os.path.join('iris.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sepal_length,sepal_width,petal_length,petal_width,species\r\n",
      "5.1,3.5,1.4,0.2,setosa\r\n",
      "4.9,3,1.4,0.2,setosa\r\n",
      "4.7,3.2,1.3,0.2,setosa\r\n",
      "4.6,3.1,1.5,0.2,setosa\r\n",
      "5,3.6,1.4,0.2,setosa\r\n",
      "5.4,3.9,1.7,0.4,setosa\r\n",
      "4.6,3.4,1.4,0.3,setosa\r\n",
      "5,3.4,1.5,0.2,setosa\r\n",
      "4.4,2.9,1.4,0.2,setosa\r\n"
     ]
    }
   ],
   "source": [
    "# No Windows use !more iris.csv. Mac ou Linux use !head iris.csv\n",
    "!head iris.csv\n",
    "#!more iris.csv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[5.1 3.5 1.4 0.2]\n",
      " [4.9 3.  1.4 0.2]\n",
      " [4.7 3.2 1.3 0.2]\n",
      " [4.6 3.1 1.5 0.2]\n",
      " [5.  3.6 1.4 0.2]\n",
      " [5.4 3.9 1.7 0.4]\n",
      " [4.6 3.4 1.4 0.3]\n",
      " [5.  3.4 1.5 0.2]\n",
      " [4.4 2.9 1.4 0.2]\n",
      " [4.9 3.1 1.5 0.1]\n",
      " [5.4 3.7 1.5 0.2]\n",
      " [4.8 3.4 1.6 0.2]\n",
      " [4.8 3.  1.4 0.1]\n",
      " [4.3 3.  1.1 0.1]\n",
      " [5.8 4.  1.2 0.2]\n",
      " [5.7 4.4 1.5 0.4]\n",
      " [5.4 3.9 1.3 0.4]\n",
      " [5.1 3.5 1.4 0.3]\n",
      " [5.7 3.8 1.7 0.3]\n",
      " [5.1 3.8 1.5 0.3]\n",
      " [5.4 3.4 1.7 0.2]\n",
      " [5.1 3.7 1.5 0.4]\n",
      " [4.6 3.6 1.  0.2]\n",
      " [5.1 3.3 1.7 0.5]\n",
      " [4.8 3.4 1.9 0.2]\n",
      " [5.  3.  1.6 0.2]\n",
      " [5.  3.4 1.6 0.4]\n",
      " [5.2 3.5 1.5 0.2]\n",
      " [5.2 3.4 1.4 0.2]\n",
      " [4.7 3.2 1.6 0.2]\n",
      " [4.8 3.1 1.6 0.2]\n",
      " [5.4 3.4 1.5 0.4]\n",
      " [5.2 4.1 1.5 0.1]\n",
      " [5.5 4.2 1.4 0.2]\n",
      " [4.9 3.1 1.5 0.1]\n",
      " [5.  3.2 1.2 0.2]\n",
      " [5.5 3.5 1.3 0.2]\n",
      " [4.9 3.1 1.5 0.1]\n",
      " [4.4 3.  1.3 0.2]\n",
      " [5.1 3.4 1.5 0.2]\n",
      " [5.  3.5 1.3 0.3]\n",
      " [4.5 2.3 1.3 0.3]\n",
      " [4.4 3.2 1.3 0.2]\n",
      " [5.  3.5 1.6 0.6]\n",
      " [5.1 3.8 1.9 0.4]\n",
      " [4.8 3.  1.4 0.3]\n",
      " [5.1 3.8 1.6 0.2]\n",
      " [4.6 3.2 1.4 0.2]\n",
      " [5.3 3.7 1.5 0.2]\n",
      " [5.  3.3 1.4 0.2]\n",
      " [7.  3.2 4.7 1.4]\n",
      " [6.4 3.2 4.5 1.5]\n",
      " [6.9 3.1 4.9 1.5]\n",
      " [5.5 2.3 4.  1.3]\n",
      " [6.5 2.8 4.6 1.5]\n",
      " [5.7 2.8 4.5 1.3]\n",
      " [6.3 3.3 4.7 1.6]\n",
      " [4.9 2.4 3.3 1. ]\n",
      " [6.6 2.9 4.6 1.3]\n",
      " [5.2 2.7 3.9 1.4]\n",
      " [5.  2.  3.5 1. ]\n",
      " [5.9 3.  4.2 1.5]\n",
      " [6.  2.2 4.  1. ]\n",
      " [6.1 2.9 4.7 1.4]\n",
      " [5.6 2.9 3.6 1.3]\n",
      " [6.7 3.1 4.4 1.4]\n",
      " [5.6 3.  4.5 1.5]\n",
      " [5.8 2.7 4.1 1. ]\n",
      " [6.2 2.2 4.5 1.5]\n",
      " [5.6 2.5 3.9 1.1]\n",
      " [5.9 3.2 4.8 1.8]\n",
      " [6.1 2.8 4.  1.3]\n",
      " [6.3 2.5 4.9 1.5]\n",
      " [6.1 2.8 4.7 1.2]\n",
      " [6.4 2.9 4.3 1.3]\n",
      " [6.6 3.  4.4 1.4]\n",
      " [6.8 2.8 4.8 1.4]\n",
      " [6.7 3.  5.  1.7]\n",
      " [6.  2.9 4.5 1.5]\n",
      " [5.7 2.6 3.5 1. ]\n",
      " [5.5 2.4 3.8 1.1]\n",
      " [5.5 2.4 3.7 1. ]\n",
      " [5.8 2.7 3.9 1.2]\n",
      " [6.  2.7 5.1 1.6]\n",
      " [5.4 3.  4.5 1.5]\n",
      " [6.  3.4 4.5 1.6]\n",
      " [6.7 3.1 4.7 1.5]\n",
      " [6.3 2.3 4.4 1.3]\n",
      " [5.6 3.  4.1 1.3]\n",
      " [5.5 2.5 4.  1.3]\n",
      " [5.5 2.6 4.4 1.2]\n",
      " [6.1 3.  4.6 1.4]\n",
      " [5.8 2.6 4.  1.2]\n",
      " [5.  2.3 3.3 1. ]\n",
      " [5.6 2.7 4.2 1.3]\n",
      " [5.7 3.  4.2 1.2]\n",
      " [5.7 2.9 4.2 1.3]\n",
      " [6.2 2.9 4.3 1.3]\n",
      " [5.1 2.5 3.  1.1]\n",
      " [5.7 2.8 4.1 1.3]\n",
      " [6.3 3.3 6.  2.5]\n",
      " [5.8 2.7 5.1 1.9]\n",
      " [7.1 3.  5.9 2.1]\n",
      " [6.3 2.9 5.6 1.8]\n",
      " [6.5 3.  5.8 2.2]\n",
      " [7.6 3.  6.6 2.1]\n",
      " [4.9 2.5 4.5 1.7]\n",
      " [7.3 2.9 6.3 1.8]\n",
      " [6.7 2.5 5.8 1.8]\n",
      " [7.2 3.6 6.1 2.5]\n",
      " [6.5 3.2 5.1 2. ]\n",
      " [6.4 2.7 5.3 1.9]\n",
      " [6.8 3.  5.5 2.1]\n",
      " [5.7 2.5 5.  2. ]\n",
      " [5.8 2.8 5.1 2.4]\n",
      " [6.4 3.2 5.3 2.3]\n",
      " [6.5 3.  5.5 1.8]\n",
      " [7.7 3.8 6.7 2.2]\n",
      " [7.7 2.6 6.9 2.3]\n",
      " [6.  2.2 5.  1.5]\n",
      " [6.9 3.2 5.7 2.3]\n",
      " [5.6 2.8 4.9 2. ]\n",
      " [7.7 2.8 6.7 2. ]\n",
      " [6.3 2.7 4.9 1.8]\n",
      " [6.7 3.3 5.7 2.1]\n",
      " [7.2 3.2 6.  1.8]\n",
      " [6.2 2.8 4.8 1.8]\n",
      " [6.1 3.  4.9 1.8]\n",
      " [6.4 2.8 5.6 2.1]\n",
      " [7.2 3.  5.8 1.6]\n",
      " [7.4 2.8 6.1 1.9]\n",
      " [7.9 3.8 6.4 2. ]\n",
      " [6.4 2.8 5.6 2.2]\n",
      " [6.3 2.8 5.1 1.5]\n",
      " [6.1 2.6 5.6 1.4]\n",
      " [7.7 3.  6.1 2.3]\n",
      " [6.3 3.4 5.6 2.4]\n",
      " [6.4 3.1 5.5 1.8]\n",
      " [6.  3.  4.8 1.8]\n",
      " [6.9 3.1 5.4 2.1]\n",
      " [6.7 3.1 5.6 2.4]\n",
      " [6.9 3.1 5.1 2.3]\n",
      " [5.8 2.7 5.1 1.9]\n",
      " [6.8 3.2 5.9 2.3]\n",
      " [6.7 3.3 5.7 2.5]\n",
      " [6.7 3.  5.2 2.3]\n",
      " [6.3 2.5 5.  1.9]\n",
      " [6.5 3.  5.2 2. ]\n",
      " [6.2 3.4 5.4 2.3]\n",
      " [5.9 3.  5.1 1.8]]\n"
     ]
    }
   ],
   "source": [
    "# Carregando um dataset para dentro de um array\n",
    "arquivo = np.loadtxt(filename, delimiter=',', usecols=(0,1,2,3), skiprows=1)\n",
    "print (arquivo)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "numpy.ndarray"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(arquivo)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nAlJzFxEpoP8PTuAMuL3ikq8AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x110572dd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Gerando um plot a partir de um arquivo usando o NumPy\n",
    "var1, var2 = np.loadtxt(filename, delimiter=',', usecols=(0,1), skiprows=1, unpack=True)\n",
    "plt.show(plt.plot(var1, var2, 'o', markersize=8, alpha=0.75))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Estatística"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Criando um array\n",
    "A = np.array([15, 23, 63, 94, 75])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "54.0"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Em estatística a média é o valor que aponta para onde mais se concentram os dados de uma distribuição.\n",
    "np.mean(A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "30.34468652004828"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# O desvio padrão mostra o quanto de variação ou \"dispersão\" existe em \n",
    "# relação à média (ou valor esperado). \n",
    "# Um baixo desvio padrão indica que os dados tendem a estar próximos da média.\n",
    "# Um desvio padrão alto indica que os dados estão espalhados por uma gama de valores.\n",
    "np.std(A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "920.8"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Variância de uma variável aleatória é uma medida da sua dispersão \n",
    "# estatística, indicando \"o quão longe\" em geral os seus valores se \n",
    "# encontram do valor esperado\n",
    "np.var(A)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "d = np.arange(1, 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 4, 5, 6, 7, 8, 9])"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "45"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sum(d)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "362880"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Retorna o produto dos elementos\n",
    "np.prod(d)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Soma acumulada dos elementos\n",
    "np.cumsum(d)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-0.05316976  0.05460669] (2,)\n"
     ]
    }
   ],
   "source": [
    "a = np.random.randn(400,2)\n",
    "m = a.mean(0)\n",
    "print (m, m.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nS5tNl9HVMT92yor4WN7Kc2tth0LZ4MkzUZa38ry5mGImFmzpork0GSGZLXFrLcN42HI1CKy4i6uJ\nMX7iylTTTvfQ2f2un4Rure0Q8Lhrk9Cth1mklLy/kuZBuoDHrWHqFahIPB4NrybwuTU+dSEGF0/B\nyy/DCy9Y4l4v8B4PeDxoL78Mj1zac82fnY3z5mIKtybQDZOriak9ewTVSa5aebIaPpjMlg4kNK+Z\nePdjYNi6uRIxXvnBQ+5s5KhIE5fQiAYOJzyykaNY4QwqTgj7W8AjQohZYAX4WeDnHDhujUH0n3U7\n2fQzOXXbqcfO1/1vX729z6K8OBliIZltKszVMVd94GdG/Xx3IUXJkCSzJX79jSUyRYOzsWDbc2p2\nDydHfPtexl7ud3USivhcBL1WSYKV7QLTsQARnxuPS/CnCylr1eJ3o5crSAk+j4uKKckUy/yHN++z\nvlPixT//ebTvfQ9+6Zfga1+DbBbCYfjrfx3+4T/cl3naqbVY33TESddio4ifiwWburL6MTDszrNU\nqfD1+WWrY9PuWIplD4Zpdn0evZzrSbbKW9G3sEspDSHE3wf+C1a4469LKb/f98jqGET/Wbfi08/k\n1O0y0y5px86i/OT5UX7n7ZWmk41d6nrRMHl2KkI8ZPmHX/twg818iXjI1/VKotk97OV+VyehsN9T\n+zMBtciVa7NjbOZKRANedoolPC6NfNmq1zIZs5Koon73xyJ38SL88i9b/3RArw03+nUt2lng1f0e\nuwnbifaB9ef5O+8sAxDxu8npFVwuQbpQ5tdfX+Jf/pUrjq9CTloyYa84Escupfwm8E0njmXHIPrP\nuhWfficnO7HupOZ59bt2128plWs52TSOeSOrMx72WfXRdxN9fG4XN1cznI0ZCE10tZJoVbu92f2u\n37AuG5Z/91TUX2uLN+J3Mz0aYHk3Tr0aufLU2VG+fSfF1KifYMHF3d1iUyGfm4DHRbkiCfk9ZIvG\ngbv4nHItmqbk9Y829tWtf2tpC59bsz2+06tfAZRNSdmw9g0qJhimyUIyy0Iy21ftoUZOYjJhrwxN\n5umg+c96saKdmpzsHs658zGuzY419dnaXb92k03jmKtNEUwpayV5S+UKvt0Ycbua643XoF36f+N5\nXE2M7dvMfXMxxVIyTzJnTTSJeJCribFaW7xowIOmhZiNB2tjgr2de0JeN5oQZHWDdKHMTCzIiN+9\nJ2bbSauu/njFslErNhb2W26jbsW1ei3+4MYqd5O5PXXr/R6NYtm0Fe9m9/xcLNixoVDP5ZkoYZ+L\n+1l9N6RT4tI0srrBb711n1Su5JiAHsdkwoNiaIR9EOl2snFqcmp8OCumycvzy7x6a52Iz9PxS9TJ\nZFM/ZtOUrKaLvHLzIR8+zBD0unjkVIQnpiI8SBfRhGiaNGUnko3nYVQqfO27d/mdd1YYC3n2xdpX\nPx/yuSmUK7vZrBVCPjfzd7f4uz96sWVbvPpzjYet5JuX55dZTOWJ+Nw8SBdrIue0D7z+eIvJnFVs\nbffg42EfX5qb6cq1WL0W5+NBNjL6bt36AlOjfkI+N5en90cbNVsNtfLJtzvfC+NhPntpnP+4dR+f\nS6BpGlG/m+18ie8/2OGHz8ccE9BhSSYcBJSwDyGND+dO0SCZ1YlHvAgBAa9rX4x6M7qZbKqi4HNr\n6GWTxHiI0YBnN5PS/uVotfR9mC6SLZatxs5eFx+tWxUe4yEvWd2wYu0XUkxF/fg8Lla3CyChUKog\nAE3TgArFUqVWVOzZC3HbMdRPLPWrgF/4C0/sqw7ptFVXf7x0oUy+ZBD0unhiagSXgB29wrXZsa4m\njeozMBb0Mj0aYGW7QF43uJfK84XLU7Vs0Ic7RUq7LqulVK4m7vX3vJMEtGZomuD5HzrFdxc2rbr2\nWMLrdbvQhHRUQIchmXBQUMI+hDQ+nJlimYxucGc9h8+tIYGAx8XDnaLjVoimCZ46O8rrt5NEd0W9\n+nLEw9625XLra7/P393ig7UMQY+LcsVkK1fCpWnEQj78bo0H6QJr6SJffWOR8bCPjF4mlSnxxJnI\nbgSGFXnh97rIlyq2L2c7n6qde+i9+9skM/YJWb1cz/qJOKcbtfLDbk1jOhbg/ma+VoulU6rPgAQ+\ncWaEqVE/91J5/tafm63VdU/EQ1xf3GxrifdrxZ6JBnjsdJjVdJHVdBG35iJXKrOZK1MxzVpt9X4F\n1Al3ppOBGIO8CauEfQhJxEPMnY/x6q0N9HLFivyQkoBHYEpwa5DM6pSM5iFn/TyU7dL26//M79Zs\ns1ZvrKRZSGa5NGEJglGRFIwKYZ8Hn0sghEAvV8iVTJ5JxIiHfFRMk29nUjzc0Ql4XKxlLB97Tjea\nNtjoxvr+OBb+IYvJHA93iszEgrWErEZR6vQa1k/EIZ8bKSUSQcCrkcrpbGT1Wsu/fu7BFy5P7WnW\n0em592vFJuIhLk5EePvedi2z+fzYCFuFMrceZon43I5FsvXrznRqr2vQN2GVsA81VgKvEBIJ3N/6\nuIb4aMCDR7Pvo9nvQ9mqOuSZqJ+dokGmUOZr37lLLOhhebuwL2vV0g7B5ekoZ8eCPNwpot+rcCbq\nJ6NXAEvU4yEvY0Er2cWlaSTiQX7k0QlOR/2UDBOf22Wb6VulG2v044QsqyjZ8laBj9Yzlrvh8ck9\notTNNWwU4ZDXjSklN5bTpPIlxsO+Wsu/fu5B4zXo9Nyr43tzMUW2aFA0zNpeQydommDufIwbK9uM\n+D0Edyfx+5t5fuTRCc6MBgYikq1+vP3udQ36JqwS9iFkKZVj/u5WrSnGYjLLB6sZZmIBXJqGS4N0\nwaDcJEnEiYey8eX47kIKaVrRMivbBavIV7qA3xPh0kSYle0CHz7MoGnw/OOnuDIT5Y3bSSQQC3oZ\n8Vu1yONhLwLQDZNPXxhjazfxRbBbS33XFdTpOLuxRhsTsqpFyb7w5Gm++PT0HlHq5ho2inA87GV5\nK8+vv7HEkzPRWphiv/fA7twlklROp1CqEPC6kMh9516tr7ORKfLW0hYBj2aVGX5nueOJ5lTUT9jv\nYaruenR7rzplEFwgg74Jq4R9CGl8qNyawO92oRsmQa+GYVpt3qolYNt934mHcjLiI1syWN6yGljv\nFA1cmiBdMHhyOsrMWNASyctTfPGpaYB9roQvzc1wbXasVjulWbRGN8v5TnyqVaFY2cqztmM11Y4E\nPIz43YxHfFaBqwbh6PYaNopwMmtZ6vGQJbIC+r4HjYI3Ew0gELz24QZCghRw9by9JX5vK89iKt9z\nMa/DSiIcFBfIoG/CKmEfQhofqqDPTdDv4qmzo3hdrn0lYNt934mHMhEPMRsPcWstgxBQMqwwRI9L\nUCiZnI768Hk0kNSiM5q5Euo3Efv1h1at5blEjBsraaS0Ki1W2RMbn8pzN5nj5qoVyjkR8TcNQ2x2\nDe02kO3GOx72ktEN7m/mCPs9PcWy12OfgRrClCbPPTpBsWTWnot7W/mOqoJ2m5F6GEmEg+ICGcRs\n+HqUsA8h52JBZneLZfndGiGfi2uJeK0Erl0J2Hq6fSg7WfpqmuDFq2dZTOUZ8bkI+twsb+W5vZFj\nO69zZyOLAF7/KMnrt5M1K6udr7MTf2j9+MZtimsBzC9t1c73jbrf3xMbX6pwYSLEZq7MpYkQUoim\nYYidbiDbWZOmKbm+uEkyo3NzVUcIq8nGC7uTSC+uhmaCF/BonI+HYffW5vXKHrGu/taD7QIZ3egr\niuUwkggHxQUyiNnw9ShhHzJMU/LyO8ssJLMEdjMMr8xE+dufvchyuuB4Fmw3S98L42Gef3yS60ub\n5PQKo0EvX/rhGF63xh//YH1PyV6nrKzG8S0lc0ggEQ/WShzMJWJNrbyqUBRKVks6l6bhc2uMBKwE\npmZhiHbXsFKR/OJ/vUXE56pZ4XbnuZDM8uqtDRLxAOfjQYSArG5wbdYqWdyLq8FO8Pzu5hmoAIZh\n1tr5+dyCjWyJVEYnMR4aOAu0yiC5QAYtG74eJexDRtUyqy/wtJjKs5wu1CoHVj/Tytrr9KHsd5Pw\n+uImf/j+Gus7RbK6UUt776QMbzurtVor5Q9urFoCCeRKBiCIBDy1Jthet9bUyqsKRcDr2j2micSq\n294sNt7uGpqm5F/+4QfcWtsh6LVeq+nRANGAZ5+F/NJb920/l8qW0ERvrgY7wQv73VwZD7GYyu9b\nmZmm3NfOb2rEh8ul8dlHx3lqZrTpNT/KjctBd4EMCkrYh4xWS1Gny8G2+712m4QLG1nm727Zpr23\nigt/mC4yf3eLhWSW+o5U9edRtdS/uVsrZSOjE/S4dsdouRxiQS9IEIKmVl59qF/AuxsbH2odG2/H\nUirHYipHwLNb+wVY3sqjaaE959nuc9XrLYCtfImcboWOtks2sxO8Z2fjtQzUZu0O65uvrO7onBsL\ncCYasP2tw+h52o5Bd4EMCkrYh4xWS9GD2FjqZunbaM1Ve5o2S3tvFheeLZb5YC3DpYkwl6ejtq6b\n6rmeiwdZ3500UrkycjedvdpyDgGXp6PoZZPrS5tI0+ooZW0sWnkAVaFY39HRjQpet8apEX9XgrGe\n0Ql7reYeK9sFBJAvVZiNB/ecZyefM6XJm4ubrKYLuDQNo2Iyv7TJs7Pxlhb0XCLGXCK2ryOT3cps\nPaO3befXyKD0PB1kF8igoIR9yGi1FO2l81A/v1dPs7rgEit56oemIoR8LpZSeX7i8hR/5ZmZpnHh\nD7Yh6HGxmi5ydixYs7zrz8OuVopRsRKWgl4XmULZ8lsnxrgwHiYxFuJ01MfL88vkdjcQf+Vbdzre\nxG3HZMSH0ARPTEWYjgXIFg0yepkXr+4VuHafOxcLktMr3FjZxiWsDNxq/9alVG7PGPsJ/euknV8j\ng9zzVLEXJexDRqul6EFsLHW69LWz5qo9TReS2T1ldr+7mELCHgGqF42Qz20VFsNyqYz4TTJ6mQfb\nBRY2siTioaa1Uv7mn0swEwvusVoBXn5neU/bvIDHxRNTkZ5EyM7PbDcBPv/4qVrJ4CrtPndvK0+x\nXOHUSAC/W8PtEpQrJrnS/jrx/azQEvH27fwaadbztFntdyXsR4cS9iGk2VL0oDaWOln62llz1Z6m\nV2aifPWNRX7oTKRm5b1yc525RIxLdQ2hq6IxGvBwJurno40s2/mSbajkC8/M2NZK+ZFHJvfFwlf9\nyXZt85DwcKdYO4d2PuJWVnKn7fFafW49o+P3uPC5NSJ+a4LbzpdsXSSN11wA2WKZ1z7cAHC8P4Dd\n83U1EWMhmbM1JpzYaD3qzdphRQn7MeIoN5Za9TRd3y3WtZbWWdkuAJAvGbw0v8wvfP7xWiXCetGI\nBj186YdnWoZKdnqurdrmSSTzS5v7IkeauTPaWcmduHRaTZTNXCRziRimlHx3IVUTOCvJqcz9zTwh\nn4vlzTy3kznkbpG1dm6ZXvoJdFrL3Yma9oOSZTqMKGE/ZhzWxpJdA+VWq4WMbrC8lScasMRVSlhM\nZmt+415DJTs51+qkY9c278r0aMuG3o3YrUzkbqlfJ6zKRhdJsVzh0xNjpAtl/tV/vknYa2Wozo6H\nSBfKrGwVyBYzlE2TYtnkqZkoT0yNOJorUI/d89Ws7WK/G/mDkmU6jChhV3RNq7A3Owva8kEHubm6\nU2uKPRMLEPK49glir6GSjeNrNuk0ts3b2NFZTOY69hE3rkwqpslSKk/2/bU95Wl7tSrrJ7iHO0Xm\nlzb53nKaWw8zBDxupkf9SCn5jwsppIRowM10LIBbE9xez3J2LFir935Yvm47sXciQ7QfV9NJRwm7\noms6cUfUo2mCn7lqpe9HfB7CfjcRn4s/vbPJN5sIYrsOQa3KH3Qz6WhCdLXh3OgyyuhlBPDYqXAt\nFb9fq7IqlIDVts/vru0NLKXyAHg0DSEgGvCylS/z+OkIdzfz5PQKYyEOJCOzG3+3Exv59ccQwPsr\naT7ayHbsajrJKGFXdE0n1tg+ERgL8fzjp3bj1A1W04WWgthJhyA7up10ut1wbnQZPdgu8PpHSVy7\nte+djAqx2xswTBMpwePSkFJSKFfIlwxyukE8+LHP3emMzL3lB6xzTYyH+JkmDcyd2MivP0a2WOaj\nDasxy0G6mo4LfQm7EOJLwP8APAFck1LOOzEoxWDTzhrrxGpuJ4itOgQBTSso9pIp2+2Gc2N27eu3\nk1RMk52iQbZYJqNXiO8WI3PiOtfvDZQrVsmDixNBVtM6d1N5KqbJ+xXJp2bH+PnPXWQrV3Z047yx\n/EC6YCWC3VzLsJTK8fzjp/ZZzk5s5Ncf47UPN5ASnpgaOXRX0zDSr8X+PvDTwP/twFgUQ0I7a6wT\nq7kqiM0mh2bCAK2LZPXiAuhnw7napvDl+WWSOR0prVr41xc391iyvYTtNVbxPDsWZHY8RMTn5nsr\nafKlCvGQh1jIxxOnI6xndN5f2eHps/Z1XnqlVgHT68br1ihndUAQcmlEfJ6WtYP63civd0vdWEnv\nabpyVMW/hoG+hF1K+QFQSyZRHC+aiVEr0V3YyPKtWxtki2UEAcDeam42OZyLBfdZ43sqI+7GpDeb\nNA67SJSmWaV9X721TmI8RNhv+cLn727xqQvxWoGwbsP27Kp4Xk3E+PnnLqFpgm+8u0LJMEmMh4j6\nPfxgdYeP1jPohrmnLHGzip3dTDL15QdK5QrV3oYV0yo0li3uT55yGlX8qzuUj11hSzsxarTG6j+f\nKZS5+TCDUZE8uVvrpdG66iYmulmGKuyfNI4ilj+ZLRHxeTg7VteZqG5MvYTtLSSzvHJznYjPxelo\ngBG/m8VUvtYk46mzo7x+O0k04CFdKLO8lSfgcVtCH2huRfcyydTH1t9N5SlVTAQwNepnxO8mqxsH\nbjmr4l/d0VbYhRB/DJy2+at/LqX8Rqc/JIT4MvBlgHPnznU8QEXnOJml160Y1X9ejAYwTMlHG1nc\nLkHY77G1rhonh3bWOHQWbdFtc45Osk1bfbbdmJpNRu8t28e+tyrta7cHkczo5EsVHj0VYTTgsVbQ\nTfzPvUwye2PrQ7iEwO0SnI74eJAuHrjl3Hj9rybsm58oPqatsEspf8yJH5JSfgX4CsDc3Jx04piK\nj3E6S69ejKSUpAtlkhmd95a3ayJU/8Ktbhf2iNfl6ShuTfDpi+M89+hER5NMJxufTizJO71WpilZ\nSGb5rbfus5TKN41Tbzcm29j3ZI6MXibi8+w7ZiclgKsW7FwixisfrJMvVTgd3d287qBhdzfx5XbJ\nY8Ce3rR2E59TJQVU9mn3KFfMMcHpLL2qGFVMkw9WM7VszW/eWEUvm7zwzMwet0lGL5PKlDgz6sel\naUggEvDw3KMTHf9+p9Z4v0vydteqKugvvXWf9x+kub+Zx60Ja5NyKsKbi6k917XdmPbHvhtI4LFT\nEdtQz05LAIPV8u/m2g4VU/InHyUZD/tIxINNa8n3Gl9utwq6NNk6AqqdW82Je6Wwp99wx58C/g0w\nAfyBEOJdKeWfd2Rkih3U6/UAAA/xSURBVK5wuhdkVYxeubnOR+tW1uOjpyI8dsqqiDgV9e954Sqm\nybczKW49zO6xbFtZ0t2WJajSb7RFJ81KqpUgpYR0wcCtCVK5Mtv5MtGgh/Wdvde11ZgahX9lu8Dr\nH240DfXstARwfTets7Egm/kS91J5fvLp6aax/k5vQjYT3sbno1dB7uW5VoXD+o+K+V3gdx0ai6IP\nnC7ZWxUjr1tDL1dIjIf2+G8XNnJ7XjiXppGIB/mRRyc4Mxpoa0k3s/R++unpWv3xCxMhPj0bd/wl\n7aRZSbUSpGmarKYrxIJuhNDwuiCZtRpydHs960M932gR6tmqtG+9aD3YLiBNWbsH8ZCPvF7B73H1\nXdWxU3FsJryNz0evhka3z7Vy3VgoV8wxoRtLrNOXVtMET58d5Y3d6AtR92JdmAhx40F6zwsnNMFT\nZ0c7enE76cbzvZVtvvHuAySSZi3ynL5W1T+rZnsKIXBroBsSkJQqMB7yWX1UD+D3ofMY/oxukMzo\nTMcCNZdOr26VeroRx2bCa/d89GJodLvCUK4bCyXsx4RuLLFuLJpmL9ZnLo6zmi72vKTvpBtPKqfz\n2q0Nnjk3itslCHhd+/zbTl8rqxSuVc43FvTUSh+M+N1Mjvh5YipCvlTh1Ij/QH6//jON4tsYNVQx\nTVIZnVsPM3s2YfuNUOlGHA/q+ai/Dt3sqTjtkhxWlLAfIzrxPXdr0bR6sXrdxDRNiV6ukMzqBH0u\nxoJeJOzrxpPXK2RLBn92f7sW9hfwuvb5t3vB7loZhsk3v/eApWSWrG751cN+D3OJMXweFyN+D4Wy\n2VWT625+vx2NouXSNBLjIT776Dhnou3dX73+TitxPIjno5FurtVBdBEbRpSwnzB6DXdrVrWxW3Gq\nrhjeXEyRKRq89uFGLZKjsRuPYZro5QrTUT8hnwfTNFnLdO/f7nRcv/raHb7+zgoBt0bA4yYacBMP\n+/jHn38Mt6a1FaiD3rRrJlpPzXTm/ur3d5qJo5PPR7+oDFULJewnjKO2aOpXDGGfm7WdIlu5Mn/5\nqTN89tLEnhC5rVyJeMiHUYGdQhlJ//7tduMKed1EAx6klOwUDTQBW7kyz+6WB6hiF9HjRHhfKw5L\ntI5KHJ2YGFWGqoUS9iPgKMOxjtqiWc/oSFPywWqmFqOd1Q2+cyfFc49O7nkpi+UKv/tny4T9Hool\nE79XI6cbffm3W42rWg9FSonYTcyy6zVqt08xGw+ykMx11Imp1/t/WKJ1FOLoZDTLUawUBo2hEvbj\nEJ961OFYTr+03d6TyYiPbMlgeatANGA9fqaULKbytTZ51X9MU+7ZgMuXKo74t5uNy67X6NVEbN/v\n2e1TVOuUt3NxdXv/7a7vYYhWp+Lo1DupolmcZWiE/agF0SkG4QF2yqLp5Z4k4iFm4yFurWWoFgWd\niQWJ+Nz7RPAwLUfbXqOTcZ45F2MplWtb892/W4Gx2u1nM18imbVWHaYpa9/t5v4P+jPv5PhOQjTL\nYRqmQyPsgyCITnCcHuBe7ommCV68epbFVJ4Rn4uQ38OI382DdNHWz39Yy+r6SaTaa3QhmeO331kB\nAXPnY1ybHSOZLaGXK0jknn2KkM/N5ekwC8ksS6k8yazOeMjH7727wmq6uK/lXyf3f9CfeSfHd9R7\nPwfNYU/SQyPsx0UQj9MD3Os9uTAe5vnHJ2tt8rK6MRCRC/VNHRZT+Zq/vGKafH1+mVdvbRDxuWsJ\nU8tb+Vri1LOzcV54ZoZv30ny1TcW+cSZkVoYp13Lv1b3v2rZdVLX3kl6qdPu1Dt51Hs/B81hT9JD\nI+zHRRAP+wE+yOVfPwWlmrlYBmEfpVGwdooGyazOhfEgM2NBTClZ3rJqsvg9rj3j93lcjId9xEPW\nNRDQtuVf/f3vtq69U/Rap92pd/K4R7MctmE6NMJ+XGb0w3yAD3r51889sXOxDIpPuVGwskUDISC0\nW2ZAEwKBwO9x8eyFeMvv1otdddI6Fw8yFfXjc7uYHNl7/3upa+8EvdZpd/KdPM7RLIdtmA6NsB+n\nGf2wIg4Oevnn9D0ZFJ/y/jK7ZcZDvlpt9FYvZauWf3aT1rXZvU0jGi27Xurat8PuuXKiTvswv5MH\nzWEbpkMj7HC8Z/RGnLBeD2P55+Q9sWvusbGj89797UMVDLvGEtcXN5m/u9X2pWwmdp1OWo2WnaT7\nuvataPZczSVijtVpV+znsCfBoRL2k4QT1uuw7Uvsb+5RoFA2+Ob7a+iGuWdSO2hffKNgXRgP86kL\n8Y5eSjux63SSPWjLrtlzNZeIHQtX5yBzmJOgEvYBxQlre1j2JaoivbZTZDYe5L3lNB8+zBD0unhk\nMsJjp8J7JjXDMPnV1+5wfWkTv1sj7Hfz7Gz8QH3x/b6U9ZPWTtEgUyjzMKNzfyvPxMbHE8VBW3bN\nnqtUtqTcKscIJewDihPW9jD4QBtdAxLJWNDL7HhoX3OPaoejX33tNi+9vUxot+LjVNTfdTlfu1ov\n97byB7YCSMRDzJ2P8fX5ZZJZndxue7z/9zsG376d3DMxHaRl1+q5Um6V44MS9gHFKWt70F9WO9fA\nzbUdfB7XvuYe1Q5Hby1tEdz9eymtsgNuTXS8mrGbTATC8YYe9Wia4NrsGK/e2mAi4uX2epaxkJes\nXiHkcx/aJvGwrOIU/aGEfUAZBmvbCexcA2Gvm4mIj5Xtgm2HI79HqxXpErvf0439xbqa0TiZpHI6\nr324wXOPThAP+Q4sGieZLRHxuRECvG4XLk1DUKFYMg8t2e6kPFcnHSXsA8ygW9tOYOcaELtlBzQh\n9onPZMRHyOfmTNTPg3QRKeVusa6pnrs3FUoVhMQS2JDz0UNVt8+D7QIZ3WAy4t39cxMJ+L0a+VLl\n0Da1T8JzddJRwq44Upq5Bi6Mh/ek+Nd/vlasyyUolk2uJmL8/HMXO7Y6GyeTgNeFFJbAQus49W6p\n3+j1uTSSWZ1kRifgdbGWserJ5HSDq4kxTCn57kJqaCuXKgYHIaU89B+dm5uT8/Pzh/67x5lewv+a\nfeew0/qrv9epa6Dbz9t9v1cfezfXxjQl//bVjxo2en24NMEXLk8R320aMhHx2cbJD0oVR8XgIIR4\nW0o51+5zymI/BvSSzNTsOy88M3PgnYAa6dY10K8rwc7PXI2KqZ8swGog3WuXJPuNXp2zsQDTo8Fa\nOYKFjSzzd7eOPONWcXzoS9iFEP878JeAEnAH+O+klNtODEzROb0kMzX7zlTUPxBp/QeN3eRQ///2\nXZJCLCSztl2SqtmljWn6nWz0HpfKpYrBoV+L/Y+AfyqlNIQQ/wr4p8A/6X9Yim7oRRiafWchmVMi\nQ/OJL+DZ3yXp4U6R64ubtmn6nWz0DluGsGLw6asrsJTyv0opjd3//S4w0/+QFN1SLwzQ2eZfs+9c\nGA91fazjiG2XJPfHXZLg42tTMszaJHB2LMj0aMASeaw67dGgh3NjAU6N+Hnxh2f2bfRWN5BXtgvc\n38yzsl1QseWKvnDSx/43gd9y8HiKDukl6aTZdz5zcXxPn9GTmsBiZ0WH/W6ujIdYTOX3XBuvS+sr\nTV/Fliucpm1UjBDij4HTNn/1z6WU39j9zD8H5oCflk0OKIT4MvBlgHPnzv3w3bt3+xm3ooFeIkWa\nfaffqJNholVkULPN5cZN1qVUjl9+9fYet83KdoG//7lLJ8p9pTh4Oo2K6TvcUQjxN4C/Azwvpcx3\n8h0V7qgYBNpFE3U6wQ1Kg5DDZBA6XZ1EDiXcUQjxeazN0uc6FXWFYlBoF03UaVjlSXOlnMSJbNjo\n18f+y4AP+KPdUK7vSin/Tt+jUigOASfDDE9Smv6gdLpSNKcvYZdSXnJqIArF/9/e/YRYVcZhHP8+\nM5j9E4ZKinSwApFExCCyRYuiIIswKoLaFLSQwKCgRdlALkIIhAiiTaC0sT8LiyJbWBDoxv4QVsao\nSEw0FpXKlFhUNr8W95bT3Bnnzpzjfc/7zvNZefR6fV5Gnnvve8753V4r4TLDFFsi070gfjE65q2Z\nhvCdpzZv5T7CNtWWyOQXxL/Hxxk5doqTf/zFooULvDXTAC52m7dy3xtPtSXS+WXfrS8NWXH5Ivr7\n+rw10wAudpvXct4bTzWKYPIL4tGx39l7+Gf6+/p6msOmV+nOUzNLZy53HNfl3xfEtddcyprBAdSn\neX+3cpP4HbtZpppyjqApOewMF7tZpppyjqApOewMF7tZxppyjqApOazFe+xmZoVxsZuZFcbFbmZW\nGBe7mVlhXOxmZoVxsZuZFcbFbmZWGF/HbmZT8rck5cvFbmYd/C1JefNWjJl1mDgSePCSC1kycAGf\njJxg5Pip1NGsCy52M+twtpHA1nwudjPrkHIksFXnPXYz6+BRvHlzsZtZB4/izZuL3cym5FG8+fIe\nu5lZYSoVu6TnJH0pab+k3ZKurCuYmZnNTdV37FsjYnVErAHeA56tIZOZmVVQqdgj4tcJhxfROn9u\nZmYJVT55KmkL8BDwC3BL5URmZlaJIs7+JlvSh8AVU/zRUES8M+Fxm4DzI2LzNM+zAdjQPlwBHJpl\n1suAY7P8OznwuvJR4prA68rJsohYPNODZiz2bklaBuyKiFW1PGHn838WEdefi+dOyevKR4lrAq+r\nRFWvilk+4XA9cLBaHDMzq6rqHvvzklYA48C3wKPVI5mZWRWVij0i7qsrSBde6eG/1UteVz5KXBN4\nXcWpbY/dzMyawSMFzMwKk1WxlzrCQNJWSQfba3tb0kDqTFVJul/S15LGJWV/ZYKkdZIOSToi6enU\neeogabuknyQdSJ2lTpIGJX0kabj9f/Dx1Jl6Latip9wRBh8AqyJiNXAY2JQ4Tx0OAPcCe1IHqUpS\nP/AycAewEnhQ0sq0qWrxKrAudYhz4DTwZERcC9wIbCzk59W1rIq91BEGEbE7Ik63D/cBS1PmqUNE\nDEfEbG9Ca6obgCMR8U1E/Am8AdydOFNlEbEHOJE6R90i4oeI+Lz965PAMLAkbareym4e+zwYYfAI\n8GbqEPY/S4DvJhyPAmsTZbFZkHQVcB3wcdokvdW4Yp9phEFEDAFD7REGjwFTjjBomm5GM0gaovUx\nckcvs81Vt+MmCjDV1wYV8WmxZJIuBnYCT0z6tF+8xhV7RNzW5UNfA3aRSbHPtC5JDwN3AbdGJteg\nzuJnlbtRYHDC8VLg+0RZrAuSFtAq9R0R8VbqPL2W1R57qSMMJK0DngLWR8RvqfNYh0+B5ZKulnQe\n8ADwbuJMNg1JArYBwxHxQuo8KWR1g5KknbQmQ/43wiAijqZNVZ2kI8BC4Hj7t/ZFRNbjGSTdA7wE\nLAbGgP0RcXvaVHMn6U7gRaAf2B4RWxJHqkzS68DNtKYg/ghsjohtSUPVQNJNwF7gK1pdAfBMRLyf\nLlVvZVXsZmY2s6y2YszMbGYudjOzwrjYzcwK42I3MyuMi93MrDAudjOzwrjYzcwK42I3MyvMP3Mb\nBFl7GxmEAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1105b0b00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(a[:,0], a[:,1], 'o', markersize=5, alpha=0.50)\n",
    "plt.plot(m[0], m[1], 'ro', markersize=10)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Outras Operações com Arrays"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Slicing\n",
    "a = np.diag(np.arange(3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0, 0, 0],\n",
       "       [0, 1, 0],\n",
       "       [0, 0, 2]])"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[1, 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 0])"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "b = np.arange(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 5, 8])"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# [start:end:step]\n",
    "b[2:9:3] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False,  True, False,  True])"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Comparação\n",
    "a = np.array([1, 2, 3, 4])\n",
    "b = np.array([4, 2, 2, 4])\n",
    "a == b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.array_equal(a, b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2.5, 3.5, 4.5])"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Somando um elemento ao array\n",
    "np.array([1, 2, 3]) + 1.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Usando o método around\n",
    "a = np.array([1.2, 1.5, 1.6, 2.5, 3.5, 4.5])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "b = np.around(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1., 2., 2., 2., 4., 4.])"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Criando um array\n",
    "B = np.array([1, 2, 3, 4])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 4])"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Copiando um array\n",
    "C = B.flatten()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 4])"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Criando um array\n",
    "v = np.array([1, 2, 3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([[1],\n",
       "        [2],\n",
       "        [3]]), (3, 1), (1, 3))"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Adcionando uma dimensão ao array\n",
    "v[:, np.newaxis], v[:,np.newaxis].shape, v[np.newaxis,:].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 1, 1, 2, 2, 2, 3, 3, 3])"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Repetindo os elementos de um array\n",
    "np.repeat(v, 3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 1, 2, 3, 1, 2, 3])"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Repetindo os elementos de um array\n",
    "np.tile(v, 3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Criando um array\n",
    "w = np.array([5, 6])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 5, 6])"
      ]
     },
     "execution_count": 109,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Concatenando\n",
    "np.concatenate((v, w), axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Copiando arrays\n",
    "r = np.copy(v)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3])"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Conheça a Formação Cientista de Dados, um programa completo, 100% online e 100% em português, com 340 horas, mais de 1.200 aulas em vídeos e 26 projetos, que vão ajudá-lo a se tornar um dos profissionais mais cobiçados do mercado de análise de dados. Clique no link abaixo, faça sua inscrição, comece hoje mesmo e aumente sua empregabilidade:\n",
    "\n",
    "https://www.datascienceacademy.com.br/pages/formacao-cientista-de-dados"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fim"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Obrigado - Data Science Academy - <a href=\"http://facebook.com/dsacademybr\">facebook.com/dsacademybr</a>"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "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.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
