IAAR Capacitación

IAAR

Sitio de Capacitaciones de IAAR

Mini tutorial de NumPy

numpy

NumPy es el principal paquete para la computación científica con Python

Este mini tutorial esta orientado a una introducción de Python para la Ciencia de Datos. Pueden contactarme aquí para cualquier tipo de sugerencias!. Basado en la cheat sheet de JulianGaal

Índice

  1. Numpy básico
  2. Arrays
  3. Matemáticas
  4. Slicing y Subsetting
  5. Trucos
  6. Créditos

Numpy básico

Una de las funciones más utilizadas de NumPy son los arreglos o arrays: La principal diferencia entre las listas de python y los arrays de numpy esta dada por la velocidad y las funcionalidades adicionales que poseen estas últimas. Las listas solo nos dan operaciones básicas, pero los arrays de numpy nos agregan FFTs, convoluciones, búsquedas rápidas, estadística, álgebra lineal, histogramas, entre muchas otras cosas.</br> La más importante ventaja que poseen los arrays de numpy para la ciencia de datos, es la habilidad de hacer cálculos a nivel de los elementos.

eje 0 siempre se refiere a una fila

eje 1 siempre se refiere a una columna

Operador Descripción Documentación
np.array([1,2,3]) 1d array link
np.array([(1,2,3),(4,5,6)]) 2d array ver arriba
np.arange(start,stop,step) array desde un rango link

Placeholders

Operador Descripción Documentación
np.linspace(0,2,9) Agrega valores equidistantes desde el intervalo hasta el largo del array link
np.zeros((1,2)) Crea un array de ceros link
np.ones((1,2)) Crea un array de unos link
np.random.random((5,5)) Crea un array de números aleatorios link
np.empty((2,2)) Crea un array vacío link

Ejemplos

In [2]:
# Convencion para importar numpy 
import numpy as np
In [3]:
# 1 dimension
x = np.array([1,2,3])
# 2 dimensiones
y = np.array([(1,2,3),(4,5,6)])
x, y
Out[3]:
(array([1, 2, 3]), array([[1, 2, 3],
        [4, 5, 6]]))
In [4]:
# con int
x = np.arange(3)
x
Out[4]:
array([0, 1, 2])
In [5]:
# con float
y = np.arange(3.0)
y
Out[5]:
array([ 0.,  1.,  2.])
In [6]:
# rango
x = np.arange(3,7)
x
Out[6]:
array([3, 4, 5, 6])
In [7]:
# rango con intervalo
y = np.arange(3,7,2)
y
Out[7]:
array([3, 5])

Arrays

Propiedades de los Arrays

Sintaxis Descripción Documentación
array.shape Dimensiones (Filas,Columnas) link
len(array) Largo de Arrays link
array.ndim Numero de dimensiones de Array link
array.size Números de Elementos de Array link
array.dtype Tipo de Datos link
array.astype(type) Convertir tipo de datos link
type(array) Tipo de Array link

Copiando/Ordenando

Operador Descripciones Documentación
np.copy(array) Crea una copia del array link
other = array.copy() Crea una copia profunda del array ver arriba
array.sort() Ordena un Array link
array.sort(axis=0) Ordena los ejes del Array ver arriba

Ejemplos

In [9]:
# Ordenar. Ordenar en orden ascendente
y = np.array([10, 9, 8, 7, 6, 5, 4, 3, 2, 1])
y.sort()
y
Out[9]:
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

Manipulación de Arrays

Agregando o quitando elementos

Operador Descripción Documentación
np.append(a,b) Agrega items al array link
np.insert(array, 1, 2, axis) Inserta items al arrays en ejes 0 o 1 link
array.resize((2,4)) Redimensiona el array a la forma(2,4) link
np.delete(array,1,axis) Elimina items del array link

Combinando Arrays

Operador Descripción Documentación
np.concatenate((a,b),axis=0) Concatena 2 arrays, agrega al final link
np.vstack((a,b)) Apila array a nivel filas link
np.hstack((a,b)) Apila array a nivel columna link

Dividiendo Arrays

Operador Descripción Documentación
numpy.split() link
np.array_split(array, 3) Divide un array en sub-arrays de (casi) idéntico tamaño link
numpy.hsplit(array, 3) Divide el array en forma horizontal en el 3er índice link

Mas

Operador Descripción Documentación
other = ndarray.flatten() Aplana un array de 2d a una de 1d link
array = np.transpose(other)</br> array.T Transpone el array link

Matemáticas

Operaciones aritméticas

Operador Descripción Documentación
np.add(x,y) Adición link
np.substract(x,y) Substracción link
np.divide(x,y) División link
np.multiply(x,y) Multiplicación link
np.sqrt(x) Raíz cuadrada link
np.sin(x) Seno a nivel elemento link
np.cos(x) Coseno a nivel elemento link
np.log(x) Logaritmo natural a nivel elementos link
np.dot(x,y) Producto escalar link

Recordar: Las operaciones con arrays de NumPy funcionan a nivel elemento.

Ejemplo

In [10]:
# Si un array de 1d es sumada a otra de 2d, Numpy elije 
# la array con dimensión más pequeña y la suma con la de
# dimensión más grande
a = np.array([1, 2, 3])
b = np.array([(1, 2, 3), (4, 5, 6)])
print(np.add(a, b))
[[2 4 6]
 [5 7 9]]

Comparación

Operador Descripción Documentación
== Igual a link
!= No igual a link
< Menor que link
> Mayor que link
<= Menor o igual que link
>= Mayor o igual que link
np.array_equal(x,y) Comparación a nivel elemento link

Ejemplo

In [5]:
# Utilizando operadores de comparación creará un array de tipo booleano.
z = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
c = z < 6
print(c)
[ True  True  True  True  True False False False False False]

Estadística básica

Operador Descripción Documentación
array.mean()</br>np.mean(array) Media aritmética link
np.median(array) Mediana link
array.corrcoef() Coeficiente de correlación link
array.std(array) Desvío estándar link

Mas funciones

Operador Descripción Documentación
array.sum() Suma a nivel elementos link
array.min() Minimiza a nivel elementos link
array.max(axis=0) Máximo valor de un determinado eje link
array.cumsum(axis=0) Suma acumulada en un eje específico link

Slicing y Subsetting

Operador Descripción Documentación
array[i] array 1d al índice i link
array[i,j] array 2d al index[i][j] ver arriba
array[i<4] índice booleano, ver Trucos ver arriba
array[0:3] Selecciona items de indice 0, 1 y 2 ver arriba
array[0:2,1] Selecciona items de filas 0 y 1 de la columna 1 ver arriba
array[:1] Selecciona items de fila 0 (igual a array[0:1, :]) ver arriba
array[1:2, :] Selecciona items de fila 1 ver arriba
array[1,...] Igual a array[1,:,:] ver arriba
array[ : :-1] Reversa el array ver arriba

Ejemplos

In [7]:
# Seleccionando elementos.
b = np.array([(1, 2, 3), (4, 5, 6)])

# El índice *antes* de la coma refiere a filas,
# el índice *después* de la coma refiere a columnas.
print(b[0:1, 2])
print(b[:len(b), 2])
print(b[0, :])
print(b[0, 2:])
print(b[:, 0])

c = np.array([(1, 2, 3), (4, 5, 6)])
d = c[1:2, 0:2]
print(d)
[3]
[3 6]
[1 2 3]
[3]
[1 4]
[[4 5]]

Trucos

Esta es una lista de ejemplos en progreso. Si conocen un buen truco, no duden en comentar para que sea incluido en el tutorial.

In [3]:
# Truco de indices cuando trabajamos con 2 arrays
a = np.array([1,2,3,6,1,4,1])
b = np.array([5,6,7,8,3,1,2])

# Solo guardar a con indice dónde b == 1
other_a = a[b == 1]
print(other_a)

# Guardar todos las las posiciones excepto aquella en que b==1
other_other_a = a[b != 1]
print(other_other_a)
[4]
[1 2 3 6 1 1]
In [4]:
# Otra forma de trabajar con índices
x = np.array([4,6,8,1,2,6,9])
y = x > 5
print(x[y])

# Más compacta
x = np.array([1, 2, 3, 4, 4, 35, 212, 5, 5, 6])
print(x[x < 5])
[6 8 6 9]
[1 2 3 4 4]

Créditos

Datacamp, Quandl y Documentación oficial

Este post fue escrito utilizando IPython notebook. Pueden descargar este notebook o ver su version estática en nbviewer.

Comments