Numerical Python, trabajando con matrices y vectores

Python

Numerical Python, o NumPy es un paquete fundamental y básico para el alto rendimiento en calculo científico y el análisis de datos, y un paquete de referencia para herramientas de alto nivel. Entre sus características:

  • ndarray, que es un objeto matriz de N dimensiones, rápido, flexible y que permite realizar operaciones con largos “data sets”. Por ejemplo, se pueden hacer operaciones matemáticas a nivel de bloque usando una sintaxis cómo si trabajaramos con escalares. Cada ndarray tiene una shape, que es una tupla que indica los tamaños de cada dimensión, y dtype que permite conocer el tipo de datos de la matriz.
  • Funciones matemáticas standar para acelerar las operaciones sobre el total de las matrices, sin necesidad de escribir bucles
  • Herramientas para lectura y escritura de matrices de datos a disco, y trabajar en memoria
  • Algebra lineal, números aleatorios o trasformadas de Fourier
  • Herramientas para integrar código escrito en C, C++ y Fortran

Imprescindible

Si antes o después trabajas con datos … acabarás utilizando numpy. … lo quieras o no!

Porque NumPy no está especializado en análisis de datos, pero su conocimiento es casi imprescindible porque es una librería ampliamente usada por otras que sí están más centradas en análisis de datos, como pandas, y aquí es vital el conocimiento de ndarray y los objetos array incluidos en dicha librería, pues permite acelerar el cálculo básico entre matrices y vectores.

ndarray es un objeto multidimensional que contiene datos homogeneos.

Toda matriz tiene un tamaño, y un tipo (shape and dtype).

Quizás, una de las cosas básicas que debes saber sobre ndarray es que cuando haces una selección de un objeto, éste NO es copiado. Lo vemos en un pequeño ejemplo, cuyo código es:


# Manejando datos con NumPy
import numpy as np

arr = np.arange(10)
print arr

print arr[4:6]
barr  =  np.array(arr)
carr = arr[4:6]
carr[:] = 12
print "Original "
print arr
print "Copia "
print barr
print "Slicing and Index"
print carr

En primer lugar, importamos la libreria NumPy para trabajar con ella, y nos creamos un ndarray con 10 elementos.

Hacemos un nuevo array tomando como base el original. Comprobamos que NO sufre modificaciones.

Creamos una nueva variable carr seleccionando unos cuantos elementos de la variable original. Vemos que al modificar los elementos también quedan modificados los elementos de la matriz orignal:

numpy

numpy

Las matrices de NumPy no son cómo las listas

Veamos otro ejemplo de la diferencia entre trabajar con listas, y con ndarray. Un simple ejemplo:


import numpy as np
mi_lista = [1,4,6,3]
print mi_lista
print mi_lista * 2

mi_array = np.array(mi_lista)
print mi_array
print mi_array * 2

Y el resultado:

listas y narray

listas y narray

Multiplicar la lista dos 2 supone ampliar la lista a 8 elementos, mientras que hacerlo con una matriz de NumPy supone multiplicar por dos los elementos. Podíamos haberlo hecho mediante [ x * 2 for x in mi_lista ] , pero creo que con numpy es mucho más intuitivo.

En general, NumPy es una de esas librerías complejas que hay que ir dominando poco a poco, y … en ello estamos!