Numpy
Numpy
Septiembre de 2013
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 1 / 126
Indice
1 2 3 4
M odulo 1 Numpy
Septiembre de 2013
2 / 126
Antes de empezar...
Indice
1 2 3 4
M odulo 1 Numpy
Septiembre de 2013
3 / 126
Antes de empezar...
Antes de empezar
Versi on de NUMPY
La versi on estable de NUMPY a fecha de hoy es la v1.7.1. El c odigo se ha probado para esta versi on. Si tiene alg un problema relacionado con la compatibilidad, puede actualizar su versi on usando el comando pip. sudo pip install --upgrade numpy (en LINUX) Si no tiene pip instalado pruebe a ejecutar los comandos sudo apt-get install python-pip python-dev build-essential sudo pip install --upgrade pip (en LINUX tambi en)
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 4 / 126
Antes de empezar...
Antes de empezar
Lo obvio
Estas transparencias son s olo un resumen de NUMPY. Muchas de las funciones que se mencionan aqu , disponen de m as par ametros que los mostrados. Hemos seleccionado los fundamentales. Seguramente, surgir an m ultiples dudas a lo largo de la explicaci on. Como programadores con experiencia que somos en PYTHON, es conveniente que manejemos con soltura la ayuda, bien desde el int erprete o a trav es de la web.
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 5 / 126
Antes de empezar...
Antes de empezar
Uso de la ayuda
M odulo 1 Numpy
Septiembre de 2013
6 / 126
Antes de empezar...
Editando c odigo
L nea de comandos
Para ejecutar de forma interactiva usamos el int erprete de python (comando python). Si tenemos la posibilidad de instalar ipython tendremos mucho ganado: por ejemplo, la opci on de autocompletado elimina muchos de los errores que se producen al escribir c odigo.
M odulo 1 Numpy
Septiembre de 2013
7 / 126
Antes de empezar...
Editando c odigo
Editores de texto
Cuando el script tiene que hacer operaciones complejas, est a compuesto por muchas l neas, o se quiere ejecutar m ultiples veces con diferentes par ametros de entrada, lo m as c omodo es escribir el programa en un chero *.py. Otra ventaja que supone esta forma de trabajo es la correcci on de errores, cambiando s olo la l nea donde se da el error sin tener que reescribir todo el c odigo. Los editores disponibles dependen de la plataforma: emacs, gedit, notepad, ... Cada programador tiene sus preferencias en funci on de su experiencia y conocimiento.
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 8 / 126
Antes de empezar...
Editando c odigo
Entornos de Desarrollo Integrado (IDE)
Son aplicaciones que facilitan la generaci on, depurado y ejecuci on de c odigo. Disponen de: editor con resaltado de sintaxis, autocompletado de comandos, ayuda din amica, capacidad de ejecutar el script o unas pocas l neas, acceso a consola interactiva de PYTHON, acceso a variables de entorno, ... Un ejemplo de este tipo de programas es spyder. Recomiendo su uso. Es descargable en m ultiples plataformas desde el enlace code.google.com/p/spyderlib/
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 9 / 126
Antes de empezar...
Editando c odigo
Entornos de desarrollo intergrado (IDE)
M odulo 1 Numpy
Septiembre de 2013
10 / 126
Introducci on
Indice
1 2 3 4
M odulo 1 Numpy
Septiembre de 2013
11 / 126
Introducci on
Introducci on
Qu e es NUMPY?
NUMPY es el paquete fundamental para el trabajo de computaci on cient ca con PYTHON. Contiene
1 2
3 4
Funciones M odulos
que posibilitan la creaci on y manejo de arrays n-dimensionales. El tipo de dato m as importante es el array (o ndarray, de n-dimensional array).
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 12 / 126
Introducci on
Introducci on
Ventajas
1 2
Multiplataforma. Potente conjunto de librer as. Puede clonar la funcionalidad de cualquier otro paquete de c alculo num erico (MATEM ATICA, MATLAB) Perfecta integraci on con el Core de PYTHON. Interact ua con los tipos de datos y estructuras propios del lenguaje.
Gratuito.
M odulo 1 Numpy Septiembre de 2013 13 / 126
Introducci on
Introducci on
Qu e vamos a aprender en este M odulo?
Fundamentos sobre NUMPY: creaci on de arrays, indexaci on, operaciones (aritm eticas, relacionales y l ogicas), cambio de tipo de datos y valores especiales. Aplicaciones de NUMPY al tratamiento de datos cient cos: selecci on, ordenaci on, ajustes, interpolaciones, estad stica, polinomios, funciones matem aticas, arrays con m ascaras, ...
M odulo 1 Numpy
Septiembre de 2013
14 / 126
Fundamentos
Indice
1 2 3 4
M odulo 1 Numpy
Septiembre de 2013
15 / 126
Fundamentos
Arrays
Denici on
Un array es... Un tipo de dato compuesto a partir de tipos de datos sencillos. Est an ordenados seg un una secuencia denida. Como en una lista o una tupla? - S en cuanto al requisito de ordenaci on. - No en cuanto al contenido, porque s olo admite un tipo de dato por array.
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 16 / 126
Fundamentos
Arrays
Algunos tipos de datos
|Sn bool int int8 int16 int32 int64 uint8 uint16 uint32 uint64 float float32 float64 complex complex64 complex128 Cadena de texto (string) de n-caracteres Booleano (True o False). Se almacena como 1 bit Entero (int32 o int64, dependiendo de la plataforma) Byte (-128 a 127) Entero (-32768 a 32767) Entero (-2.147.483.648 a 2.147.483.647) Entero (-9.223.372.036.854.775.808 a 9.223.372.036.854.775.807) Entero sin signo (0 a 255) Entero sin signo (0 a 65535) Entero sin signo (0 a 4.294.967.295) Entero sin signo (0 a 18.446.744.073.709.551.615) Atajo para oat64 Decimal en precisi on simple. Decimal en doble precisi on. Atajo a complex128 N umero complejo, parte entera e imaginaria con oat32 N umero complejo, parte entera e imaginaria con oat64
Los tipos se referencian como cadena (int) o como constante numpy (numpy.int).
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 17 / 126
Fundamentos
Arrays
Propiedades
Descripci on Tupla con las dimensiones. N umero de dimensiones. N umero de elementos. Tama no de uno de los elementos en bytes. Tama no total ocupado por los elementos. Tipo de dato de los elementos. Parte real. Parte imaginaria.
M odulo 1 Numpy Septiembre de 2013 18 / 126
Fundamentos
Arrays
Propiedades: ejemplo
>>> a array ([[1 , 2 , 3] , [4 , 5 , 6]]) >>> a . shape (2 , 3) >>> a . ndim 2 >>> a . size 6 >>> a . itemsize 8
Cesar Husillos Rodr guez (IAA-CSIC)
>>> a . nbytes 48 >>> a . dtype dtype ( int64 ) >>> a . real array ([[1 , 2 , 3] , [4 , 5 , 6]]) >>> a . imag array ([[0 , 0 , 0] , [0 , 0 , 0]])
M odulo 1 Numpy
Septiembre de 2013
19 / 126
Fundamentos
Manejo b asico
Indice
Creaci on. Indexaci on. Operaciones aritm eticas (reglas de broadcasting), relacionales y l ogicas. Cambio de tipo (casting). Valores especiales (nan e inf).
M odulo 1 Numpy
Septiembre de 2013
20 / 126
Fundamentos
Manejo b asico
Creaci on de arrays
En principio, veremos 4 formas: 1 A partir de secuencias (listas o tuplas) de PYTHON. 2 Haciendo uso de funciones propias de NUMPY. 3 Lectura de datos desde chero. 4 Copiando otro array.
M odulo 1 Numpy
Septiembre de 2013
21 / 126
Fundamentos
Creaci on de arrays
1. Uso tipos de dato nativos de PYTHON
M odulo 1 Numpy
Septiembre de 2013
22 / 126
Fundamentos
Creaci on de arrays
1. Uso tipos de dato nativos de PYTHON
M odulo 1 Numpy
Septiembre de 2013
23 / 126
Fundamentos
Creaci on de arrays
2. Mediante el uso de funciones de NUMPY
numpy.arange([start], stop[, step], dtype=None) Equivalente a la funci on range(start, stop, step) de PYTHON. A tener en cuenta... 1. El step puede ser decimal (novedad!!). 2. El extremo nal del intervalo no se incluye. >>> numpy . arange (5 , 6 , 0.1) array ([ 5. , 5.1 , 5.2 , 5.3 , 5.6 , 5.7 , 5.8 , 5.9])
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy
5.4 ,
5.5 ,
Septiembre de 2013
24 / 126
Fundamentos
Creaci on de arrays
2. Mediante el uso de funciones de NUMPY
M odulo 1 Numpy
Septiembre de 2013
25 / 126
Fundamentos
Creaci on de arrays
2. Mediante el uso de funciones de NUMPY
numpy.ones(shape, dtype=None)
shape, es la forma del array de salida (entero o lista/tupla). Si le pasamos una lista o tupla, crea un array n-dimensional con la forma (shape) dada por la lista/tupla. dtype, cualquiera de los tipos de datos de NUMPY. >>> numpy . ones (4 , dtype = numpy . complex128 ) array ([ 1.+0. j , 1.+0. j , 1.+0. j , 1.+0. j ]) >>> numpy . ones ([2 ,3] , dtype = int ) array ([[1 , 1 , 1] , [1 , 1 , 1]])
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 26 / 126
Fundamentos
Creaci on de arrays
2. Mediante el uso de funciones de NUMPY
0. , 0. , 0. ,
0. , 0. , 0. ,
M odulo 1 Numpy
Fundamentos
Creaci on de array
3. Lectura de cheros
La funci on de lectura y sus par ametros dependen del formato del chero. Supongamos el chero datos.csv con el formato siguiente:
line 1 -> objID , RAJ2000 , e_RAJ2000 , DEJ2000 , e_DEJ2000 , upmag , e_upmag , gpmag , e_gpmag , rpmag , e_rpma line 2 -> 1237657610717364296 ,138.692294 ,0.002 ,46.253899 ,0.002 ,18.049 ,0.015 ,16.904 ,0.033 ,16. ...
La primera l nea contiene el nombre de los campos. Las siguientes, los valores de cada objeto, separados por ,.
M odulo 1 Numpy
Septiembre de 2013
28 / 126
Fundamentos
Creaci on de arrays
3. Lectura de cheros
numpy.loadtxt(fname, dtype=numpy.float, comments="#", delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0) >>> array = numpy . loadtxt ( datos . csv , \ delimiter = , , skiprows =1) >>> array . dtype dtype ( float64 ) >>> array . size 189 >>> array . shape (9 , 21)
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 29 / 126
Fundamentos
Creaci on de arrays
4. Mediante copia de otro array
Copia y original comparten memoria. ATENCION: Este tipo de copia se denomina copia por referencia.
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 30 / 126
Fundamentos
Creaci on de arrays
4. Mediante copia de otro array
Hay altenativas para la copia de arrays de forma que uno y otro sean objetos diferentes: Crear uno a partir de una operaci on con el otro. Usar la funci on copy de NUMPY. Este tipo de copia se denomina copia por valor.
M odulo 1 Numpy
Septiembre de 2013
31 / 126
Fundamentos
Creaci on de arrays
4. Mediante copia de otro array
Mediante operaci on ... >>> a = numpy . arange (3) >>> a array ([0 , 1 , 2]) >>> # Operacion aritm . >>> b = a + 0 >>> b [0] = -3 >>> b array ([ -3 , 1 , 2]) >>> a array ([0 , 1 , 2])
Cesar Husillos Rodr guez (IAA-CSIC)
M etodo/Funci on copy... >>> a = numpy . arange (3) >>> # metodo >>> b = a . copy () >>> # funcion >>> b = numpy . copy ( a ) >>> b [0] = -3 >>> b array ([ -3 , 1 , 2]) >>> a array ([0 , 1 , 2])
Septiembre de 2013 32 / 126
M odulo 1 Numpy
Fundamentos
Fundamentos
Indexaci on
Posibilidades
Tipo de selecci on Un s olo elemento Varios elementos consecutivos Elementos en orden cualesquiera
(Novedad respecto a PYTHON Core.)
Recordatorio Los ndices pueden tomar valores negativos. Al igual que en las secuencias de PYTHON cuentan las posiciones desde el nal del array.
M odulo 1 Numpy
Septiembre de 2013
34 / 126
Fundamentos
Indexaci on
Posibilidades
>>> a = numpy . arange (10) array ([0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9]) >>> a [1] , a [ -1] (1 , 9) >>> a [3: -4] array ([3 , 4 , 5]) >>> a [0:9:2] array ([0 , 2 , 4 , 6 , 8]) >>> a [[3 ,5 ,9]] array ([3 , 5 , 9]) NOTA: El extraer varios elementos de un array genera otro array!.
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 35 / 126
Fundamentos
Complicando un poco...
Arrays N-dimensionales
M odulo 1 Numpy
Septiembre de 2013
36 / 126
Fundamentos
Arrays n-dimensionales
Creaci on
Se pueden crear desde cero como hemos visto. Usando la funci on array y pas andole una lista/tupla de listas/tuplas. Usando funciones NUMPY que tengan el par ametro shape. Leyendo desde chero. Copiando/extrayendo submatriz de otro array. O se puede modicar un array existente, haciendo uso de la propiedad shape o del m etodo reshape.
M odulo 1 Numpy
Septiembre de 2013
37 / 126
Fundamentos
Arrays n-dimensionales
Creaci on
Creaci on ad-hoc
>>> numpy . ones ((2 , 3)) array ([[ 1. , 1. , 1.] , [ 1. , 1. , 1.]])
1. , 1. ,
1.] , 1.]])
M odulo 1 Numpy
Septiembre de 2013
38 / 126
Fundamentos
Arrays n-dimensionales
Creaci on
Uso de la m etodo reshape >>> a = numpy . ones (10) >>> a . shape (10 ,) >>> b = a . reshape ((2 ,5)) >>> a . shape (10 ,) >>> b . shape (2 , 5)
# lista o tupla
M odulo 1 Numpy
Septiembre de 2013
39 / 126
Fundamentos
Arrays n-dimensionales
Indexado
Se hace referencia a cada elemento del array con tantos ndices, separados por comas, como dimensiones tiene el array. La combinaci on de ndices va entre corchetes tras el nombre del array. nombreArray[indexDim1, indexDim2, ..., indexDimN]
M odulo 1 Numpy
Septiembre de 2013
40 / 126
Fundamentos
Arrays n-dimensionales
Indexado
]) ])
M odulo 1 Numpy
Septiembre de 2013
41 / 126
Fundamentos
Ejemplo
Indexado
>>> a = numpy . arange (24 , \ dtype = int ) >>> a = a . reshape ((2 , 3 , 4)) >>> a array ([[[ 0 , 1 , 2 , 3] , [ 4 , 5 , 6 , 7] , [ 8 , 9 , 10 , 11]] , [[12 , 13 , 14 , 15] , [16 , 17 , 18 , 19] , [20 , 21 , 22 , 23]]]) # equivalente a: # a [0 ,: ,:] array ([[ 0 , 1 , 2 , 3] , [ 4 , 5 , 6 , 7] , [ 8 , 9 , 10 , 11]]) >>> a [0 ,0] # e q u i v a l e n t e a : # a [0 , 0 , :] array ([0 , 1 , 2 , 3]) >>> a [0 ,0 ,0] 0 >>> a [0]
Fundamentos
Indexado
Arrays n-dimensionales
[[12 , 13 , 14 , 15] , [16 , 17 , 18 , 19] , [20 , 21 , 22 , 23]]]) >>> a [1 ,1:3 ,:2] array ([[16 , 17] , [20 , 21]])
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 43 / 126
Fundamentos
Ejercicios
Del 1 al 7
http://www.iaa.es/python/cientifico/ejercicios
M odulo 1 Numpy
Septiembre de 2013
44 / 126
Fundamentos
>>> a = numpy . arange (3) >>> print numpy . insert (a , (0 , -1) , -1) [ -1 0 1 2 0] >>> print numpy . append (a , -3) [ 0 1 2 -3] >>> print numpy . delete (a , 0) [1 2]
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 45 / 126
Fundamentos
M odulo 1 Numpy
Septiembre de 2013
46 / 126
Fundamentos
Fundamentos
M odulo 1 Numpy
Septiembre de 2013
48 / 126
Fundamentos
Fundamentos
>>> a = numpy . array ([[1 , 2 , 3] , [4 , 5 , 6]]) >>> b = numpy . zeros (2) >>> c = numpy . arange (8). reshape ((2 ,4)) >>> print numpy . vstack (( a .T , b )) [[ 1. 4.] [ 2. 5.] [ 3. 6.] [ 0. 0.]] >>> print numpy . hstack (( a , c )) [[1 2 3 0 1 2 3] [4 5 6 4 5 6 7]]
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 50 / 126
Fundamentos
Fundamentos
para listas PYTHON >>> inicial = [1 , 3 , 6 , -1] >>> final = inicial + 3 TypeError : can only concatenate list ( not " int " ) to list
M odulo 1 Numpy
Septiembre de 2013
52 / 126
Fundamentos
M odulo 1 Numpy
Septiembre de 2013
53 / 126
Fundamentos
3. , 3. , 2] , 5]]) 3. , 12. ,
3.] , 3.]])
6.] , 15.]])
M odulo 1 Numpy
Septiembre de 2013
54 / 126
Fundamentos
Cuando los arrays tienen formas y dimensiones diferentes hay que andarse con cuidado. El t ermino broadcasting se emplea para describir la forma en la que NUMPY trata las operaciones entre arrays de diferente shape. Reglas de broadcasting
1
El n umero de dimensiones no tiene por qu e ser el mismo. Es posible cuando las dimensiones nales son iguales. Vale cuando una de las dimensiones nales es 1.
En caso de intentar hacer una operaci on imposible, se lanza una excepci on del tipo ValueError.
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 55 / 126
Fundamentos
M odulo 1 Numpy
Septiembre de 2013
56 / 126
Fundamentos
Operaciones relacionales
Son las que comparan un array con un dato simple o las que comparan arrays entre s . El resultado es un array de valores booleanos (True/False).
Operadores relacionales >, <, >=, <=, (mayor que, menor que, mayor o igual que, menor o igual que) == (igual que) ! = (distinto que)
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 57 / 126
Fundamentos
Operaciones relacionales
Ejemplo 1
>>> a = numpy . arange (4) >>> print a [0 1 2 3] >>> print a > 2 [ False False False True ] >>> print a >= 2 [ False False True True ] >>> print a < 9 [ True True True True ] >>> print a <=1 [ True True False False ] >>> b = numpy . array ([0 , 1 , 3 , 3]) >>> print a == a [ True True True True ] >>> print a == b [ True True False True ] >>> print a != b [ False False True False ]
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 58 / 126
Fundamentos
Operaciones L ogicas
Son las que se dan entre datos (ya sean tipos simples o arrays) de tipo booleano. El resultado es un valor o array de tipo booleano (True/False). Se realizan elemento a elemento.
Operadores l ogicos & (y/AND l ogico) | (o/OR l ogico) (no/NOT l ogico). Este operador es unario (s olo necesita un operando).
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 59 / 126
Fundamentos
Operaciones l ogicas
Ejemplo 1
>>> a = numpy . arange (4) >>> ab = a > 1 >>> print ab [ False False True True ] >>> b = numpy . ones (4 , dtype = numpy . bool ) >>> print b [ True True True True ] >>> print ab & b [ False False True True ] >>> print ~ ab [ True True False False ] >>> print ab | b [ True True True True ]
M odulo 1 Numpy
Septiembre de 2013
60 / 126
Fundamentos
allclose(a, b[, rtol, atol]) array equal(a1, a2) greater(x1, x2) greater equal(x1, x2) less(x1, x2) less equal(x1, x2) equal(x1, x2) not equal(x1, x2)
Cesar Husillos Rodr guez (IAA-CSIC)
Fundamentos
Descripci on L ogicas Determina el valor de x1 AND x2 elemento a elemento. Determina el valor de x1 OR x2 elemento a elemento. Determina el valor del NOT x1 elemento a elemento.
M odulo 1 Numpy
Septiembre de 2013
62 / 126
Fundamentos
>>> a = numpy . arange (4) >>> b = numpy . array ([0 , 1 , 2.2 , 3.1]) >>> print numpy . allclose (a , b , atol =0.25) True >>> print numpy . allclose (a , b , atol =0.15) False >>> c = numpy . array ([[ False , False ] , [ True , True ]]) >>> print c [[ False False ] [ True True ]] >>> print numpy . all (c , axis =0) [ False False ] >>> print numpy . all (c , axis =1) [ False True ]
M odulo 1 Numpy
Septiembre de 2013
63 / 126
Fundamentos
Fundamentos
M odulo 1 Numpy
Septiembre de 2013
65 / 126
Fundamentos
>>> a = numpy . arange (4 , dtype = numpy . complex ) >>> print numpy . iscomplex ( a ) [ False False False False ] >>> print numpy . iscomplexobj ( a ) True >>> print numpy . isreal ( a ) [ True True True True ] >>> print numpy . isrealobj ( a ) False >>> print numpy . isscalar ( a ) False >>> print numpy . isscalar (1) Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy True
Septiembre de 2013
66 / 126
Fundamentos
Fundamentos
Fundamentos
M odulo 1 Numpy
Septiembre de 2013
69 / 126
Fundamentos
M odulo 1 Numpy
Septiembre de 2013
70 / 126
Fundamentos
Ejercicios
Del 8 al 15
http://www.iaa.es/python/cientifico/ejercicios
M odulo 1 Numpy
Septiembre de 2013
71 / 126
Uso de NUMPY
Indice
1 2 3 4
M odulo 1 Numpy
Septiembre de 2013
72 / 126
Uso de NUMPY
M etodos de Entrada/Salida
ndarray.tolist() ndarray.tofile(fid[,sep,format]) Devuelve el array como una lista. Escribe el array en un chero, en formato texto o binario (defecto). fid, puede ser un objeto chero con permiso de escritura o una cadena de caracteres con la ruta al chero. Vuelca la serializaci on del array al chero le. Se puede leer con el m odulo pickles. Devuelve la serializaci on del array como cadena de caracteres. El formato es que usa el m odulo pickle. pickle.loads o numpy.loads pueden convertir esa cadena en array.
ndarray.dump(file) ndarray.dumps()
El volcado de arrays en chero es u til cuando se trabaja siempre con el mismo conjunto de datos (aceleramos su lectura), o cuando se quiere almacenar datos durante la ejecuci on de un script.
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 73 / 126
Uso de NUMPY
M etodos de Entrada/Salida
Ejemplo de I/O
>>> a = numpy . arange (0 , 1 , 0.2) >>> a . tolist () [0.0 , 0.2 , 0.4 , 0.6000000000000001 , 0.8] >>> a . tofile ( datos . dat , ; , " %4.2 f " ) # c o n t e n i d o fichero : " 0 . 0 0 ; 0 . 2 0 ; 0 . 4 0 ; 0 . 6 0 ; 0 . 8 0 " >>> a . tofile ( binario . dat ) # c o n t e n i d o fichero : " \ 0 0 \ 0 0 \ 0 0 \ 0 0 \ 0 0 \ 0 0 \ 0 0 \ 0 0 \ 9 A \ 9 9 \ 9 9 \ 9 9 \ 9 9 \ 9 9 \ C9 ?\ >>> a . dump ( datos . pick ) # volcado de datos a fichero >>> import pickle >>> f = open ( datos . pick , r ) >>> b = pickle . load ( f ) >>> f . close () >>> b array ([ 0. , 0.2 , 0.4 , 0.6 , 0.8]) >>> a . dumps () \ x80 \ x02cnumpy . core . multiarray \ n_reconstruct \ nq \ x01cnumpy \ nndarray \ n >>> pickle . loads ( a . dumps ()) array ([ 0. , 0.2 , 0.4 , 0.6 , 0.8])
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 74 / 126
Uso de NUMPY
M etodos de Entrada/salida
Funci on numpy.genfromtxt
Gen erica y potente de carga de datos desde chero en formato texto. numpy.genfromtxt(fname, dtype=float, comments=#, delimiter=None, skip header=0, skip footer=0, converters=None, missing=, missing values=None, filling values=None, usecols=None, names=None, excludelist=None, deletechars=None, replace space= , autostrip=False, case sensitive=True, defaultfmt=f %i, unpack=None, usemask=False, loose=True, invalid raise=True) Esto es lo m as en cuanto a lectura de cheros en un formato no nativo PYTHON/NUMPY.
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 75 / 126
Uso de NUMPY
M etodos de Entrada/salida
Funci on numpy.genfromtxt
Uso de NUMPY
M etodos de Entrada/salida
Funci on numpy.genfromtxt
M odulo 1 Numpy
Septiembre de 2013
77 / 126
Uso de NUMPY
Funci on numpy.genfromtxt
Ejemplo 1
Para los ejercicios que siguen, usaremos los datos del chero NucleosPoblacion.csv, disponible en la web del curso. Es un chero en formato texto. la primera l nea contiene los nombres de los campos. El car acter separador es ,.
>>> data = numpy . genfromtxt ( N uc l e o s P o b l a c i o n . csv , delimiter = , , \ dtype = None , names = True ) >>> data . dtype . names # acceso a nombres de c o l u m n a s ( FID , OBJECTID , CodINE , Texto , Poblacion , CodMun , Municipio , CodProvin , Provincia , X , Y ) >>> data [ Poblacion ]. dtype # acceso a cada array por c o l u m n a s dtype ( float64 ) >>> data [ Municipio ]. size 852
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 78 / 126
Uso de NUMPY
Ordenaci on de arrays
Toda la informaci on se maneja mejor cuando hay alg un tipo de ordenaci on. NUMPY proporciona rutinas para ordenar arrays, sean del tipo o dimensi on que sean.
Funci on numpy.sort(a, axis=-1) Descripci on Devuelve un array el mismo tipo y forma, ordenado de menor a mayor seg un el eje axis. Si es None, transforma el array a 1D y ordena. Devuelve un array de posiciones que ordenar a el original de menor a mayor seg un axis dado. Si axis=None, transforma a 1D y retorna los ndices.
numpy.argsort(a, axis=-1)
M odulo 1 Numpy
Septiembre de 2013
79 / 126
Uso de NUMPY
Ordenaci on de arrays
Ejemplo 1
>>> a = numpy . array ([3 , 2 , 4 , 1 , -1] , dtype = int ) >>> b = numpy . sort ( a ) # no cambia el array >>> b array ([ -1 , 1 , 2 , 3 , 4]) >>> index = numpy . argsort ( a ) >>> index array ([4 , 3 , 1 , 0 , 2]) >>> a [ index ] # A t e n c i o n a la s e l e c c i o n array ([ -1 , 1 , 2 , 3 , 4])
M odulo 1 Numpy
Septiembre de 2013
80 / 126
Uso de NUMPY
B usqueda en arrays
Se buscan elementos en funci on de uno o varios criterios. Esos criterios se combinan en un array de booleanos.
numpy.where(condici on, a1, a2) condici on es un array de booleanos. Devuelve un array con los elementos de a1 donde la condici on es cierta, y con los de a2 si la condici on es falsa. Los 3 par ametros son arrays de la misma forma (shape), o compatibles seg un reglas de broadcast. Devuelve los elementos de array donde condici on es True. Devuelve siempre un array unidimensional, independientemente de la dimensi on del array inicial. condici on y a, deben tener la misma forma. Es la generalizaci on de extract. Retorna un array n-dimensional. La condici on puede aplicarse a una u otras dimensiones, seg un el array a de entrada. Si la longitud de la condici on es menor que el tama no del array en ese eje, la salida se trunca a la longitud de la condici on.
M odulo 1 Numpy Septiembre de 2013 81 / 126
numpy.extract(condici on, a)
Uso de NUMPY
B usqueda en arrays
Ejemplo 1
>>> arr = numpy . arange (12). reshape ((3 , 4)) >>> arr array ([[ 0 , 1 , 2 , 3] , [ 4 , 5 , 6 , 7] , [ 8 , 9 , 10 , 11]]) >>> condition = numpy . mod ( arr , 3)==0 >>> condition array ([[ True , False , False , True ] , [ False , False , True , False ] , [ False , True , False , False ]] , dtype = bool ) >>> numpy . extract ( condition , arr ) array ([0 , 3 , 6 , 9])
M odulo 1 Numpy
Septiembre de 2013
82 / 126
Uso de NUMPY
B usqueda en arrays
Ejemplo 2
>>> a = numpy . array ([[1 , 2] , [3 , 4] , [5 , 6]]) >>> a array ([[1 , 2] , [3 , 4] , [5 , 6]]) >>> numpy . compress ([0 , 1] , a , axis =0) array ([[3 , 4]]) >>> numpy . compress ([ False , True , True ] , a , axis =0) array ([[3 , 4] , [5 , 6]]) >>> numpy . compress ([ False , True ] , a , axis =1) array ([[2] , [4] , [6]])
M odulo 1 Numpy
Septiembre de 2013
83 / 126
Uso de NUMPY
B usqueda en arrays
Valores especiales
Funci on argmax(a[, axis=None]) nanargmax(a[, axis=None]) Descripci on Devuelve los ndices de los valores iguales al m aximo seg un el eje axis. Si axis=None buscan en todo el array. Devuelve los ndices de los valores iguales al m aximo en el eje dado por axis. Ignora los NaNs. Si axis=None busca en todo el array. Devuelve los ndices de los valores iguales al m nimo seg un el eje axis. Si axis=None buscan en todo el array. Devuelve los ndices de los valores iguales al m nimo seg un el eje axis. Ignora los NaNs. Si axis=None buscan en todo el array. Devuelve una tupla de arrays, una por cada dimensi on de a, conteniendo los ndices de los elementos que no son cero en esa dimensi on. Devuelve los ndices de los elementos que no son cero en la versi on 1D del array a.
argmin(a[, axis=None])
nanargmin(a[, axis=None])
nonzero(a)
flatnonzero(a)
M odulo 1 Numpy
Septiembre de 2013
84 / 126
Uso de NUMPY
B usqueda en arrays
isinf(a)
Descripci on Devuelve los ndices de los elementos que no son cero. Devuelve un array de booleanos: - True en las posiciones donde hay nan - False en caso contrario. Devuelve un array de booleanos: - True en las posiciones donde hay valores innite - False en caso contrario.
M odulo 1 Numpy
Septiembre de 2013
85 / 126
Uso de NUMPY
Valores especiales
Ejemplo 1
>>> b = numpy . arange (10) >>> b = b . reshape ((2 ,5)) >>> b array ([[0 , 1 , 2 , 3 , 4] , [5 , 6 , 7 , 8 , 9]]) >>> numpy . argmax ( b ) 9 >>> numpy . argmax (b , axis =0) array ([1 , 1 , 1 , 1 , 1]) >>> numpy . argmax (b , axis =1) array ([4 , 4]) >>> d = numpy . arange (4) >>> e = d / 0. >>> e array ([ nan , inf , inf , inf ]) >>> numpy . isnan ( e ) array ([ True , False , False , False ] , dtype = bool ) >>> numpy . isinf ( e ) array ([ False , True , True , True ] , dtype = bool )
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 86 / 126
Uso de NUMPY
Ejercicios
Del 16 al 21
http://www.iaa.es/python/cientifico/ejercicios
M odulo 1 Numpy
Septiembre de 2013
87 / 126
Uso de NUMPY
x e y son arrays. Las operaciones se realizan elemento a elemento. Las entradas a funciones trigom etricas que requieran de angulos se dan en radianes.
REFERENCIA: http://docs.scipy.org/doc/numpy/reference/routines.math.html
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 88 / 126
Uso de NUMPY
numpy.nanmax(a, axis=None)
numpy.ptp(a, axis=None)
numpy.percentile(a, q, axis=None)
NOTA: Si axis=None, se trabaja sobre la versi on transformada a 1D del array, devolviendo un u nico valor (escalar) para todo el array.
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 89 / 126
Uso de NUMPY
Uso de NUMPY
Uso de NUMPY
Uso de NUMPY
Uso de NUMPY
Uso de NUMPY
Uso de NUMPY
Descripci on Devuelve un array de ndices. Cada ndice indica a qu e intervalo de bins pertenece el elemento del array. bins debe ser mon otono creciente o decreciente. Si los valores de a est an fuera del rango de bins, devuelve 0 para ese elemento. Si right=True el intervalo de bins es cerrado. Devuelve el n umero de ocurrencias de cada valor del array en cada uno de los intervalos bin (por defecto de anchura igual a 1).
M odulo 1 Numpy
Septiembre de 2013
96 / 126
Uso de NUMPY
M odulo 1 Numpy
Septiembre de 2013
97 / 126
Uso de NUMPY
Ejercicios
Del 22 al 26
http://www.iaa.es/python/cientifico/ejercicios
M odulo 1 Numpy
Septiembre de 2013
98 / 126
Uso de NUMPY
Correlaciones y covarianzas
Covarianza
En probabilidad y estad stica, la covarianza es un valor que indica el grado de variaci on conjunta de dos variables aleatorias. Es el dato b asico para determinar si existe una dependencia entre ambas variables y adem as es el dato necesario para estimar otros par ametros b asicos, como el coeciente de correlaci on lineal o la recta de regresi on.
Correlaci on
En probabilidad y estad stica, la correlaci on indica la fuerza y la direcci on de una relaci on lineal y proporcionalidad entre dos variables estad sticas. Se considera que dos variables cuantitativas est an correlacionadas cuando los valores de una de ellas var an sistem aticamente con respecto a los valores hom onimos de la otra: si tenemos dos variables (A y B) existe correlaci on si al aumentar los valores de A lo hacen tambi en los de B y viceversa. La correlaci on entre dos variables no implica, por s misma, ninguna relaci on de causalidad. FUENTE: Wikipedia.
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 99 / 126
Uso de NUMPY
Correlaciones y covarianzas
Funci on numpy.cov(m, y=None, rowvar=1, bias=0, ddof=None) Descripci on Estima la matriz de covarianza. m es un array 1D o 2D. Cada columna de m representa una observaci on. Cada la, una variable. y es un conjunto adicional de observaciones (misma forma que m). Si rowvar es distinta de cero, cada la representa una variable. Cada columna una observaci on. bias es un entero. Si es cero, se trasponen las y columnas. La normalizaci on por defecto es (N 1), donde N es el n um. de observaciones. Si bias = 1 la normalizaci on es N . ddof sobreescribe a bias. Si es distinto de None, la normalizaci on es (N ddof ). Correlaciona dos arrays 1D seg un la expresi on z [k ] = n a[n] conj (v [n + k ]) mode vale full, valid o same, que establece los l mites del desplazamiento (n) entre arrays (ver documentaci on). C Devuelve los coecientes de correlaci on Pij = ij .
Cii Cjj
numpy.correlate(a, v, mode=valid)
x es un array 1D o 2D. Cada la es una variable. Cada columna una observaci on. Para el resto, misma leyenda que numpy.cov.
M odulo 1 Numpy Septiembre de 2013 100 / 126
Uso de NUMPY
Uso de NUMPY
Una variable correlaciona perfectamente consigo misma (valor 1 en la diagonal principal). La correlaci on var a en [1, 1].
Cesar Husillos Rodr guez (IAA-CSIC) M odulo 1 Numpy Septiembre de 2013 102 / 126
Uso de NUMPY
Muestreo aleatorio
Hemos de importar de forma expl cita este m odulo. import numpy.random
Funci on rand(d0, d1, ..., dn) randn(d0, d1, ..., dn) randint(low, high=None, size=None) random integers(low, high=None, size=None) choice(a, size=1, replace=True, p=None) Descripci on Devuelve una array de dimensi on (d0, d1, ..., dn) con n umeros aleatorios en [0, 1). Muestra de dimensi on (d0, d1, ..., dn) elementos de una distribuci on normal est andar. Devuelve size num enteros en [start, end). size puede ser entero a secuencia. Igual que la anterior pero en [start, end]. Genera una muestra aleatoria de tama no size con los elementos del array 1D a. Si replace=True la muestra es con repetici on. p es un array (de la misma dimensi on que a) que indica las probabilidades de cada elemento de a. Mezcla la secuencia dada por x. Cambia x. Devuelve None. Permuta de forma aleatoria la secuencia x. Si x es n-dimensional, s olo permuta la dimensi on dada por el primer ndice.
M odulo 1 Numpy Septiembre de 2013 103 / 126
shuffle(x) permutation(x)
Uso de NUMPY
Muestreo aleatorio
Ejemplo 1
>>> import numpy . random >>> print numpy . random . rand (2 , 3) [[ 0.47817202 0.44355165 0.9863675 ] [ 0.72560495 0.11331353 0.21659595]] >>> print numpy . random . randn (4) [ -0.98550123 0.74578984 -2.04972696 0.36567011] >>> print numpy . random . randint (0 , 11 , size =(2 , 3)) [[10 5 0] [ 7 1 7]] >>> print numpy . random . ra n do m_ in t eg er s (0 , 3 , 6) [1 3 1 0 1 1] >>> a = numpy . arange (5) >>> print numpy . random . choice (a , size =4) [3 1 2 1] >>> print numpy . random . choice (a , size =4 , replace = False ) [2 0 3 4]
M odulo 1 Numpy
Septiembre de 2013
104 / 126
Uso de NUMPY
Muestreo aleatorio
Ejemplo 2
>>> a = numpy . arange (5) >>> numpy . random . shuffle ( a ) >>> a [3 2 0 4 1] >>> b = numpy . arange (9). reshape ((3 , 3)) >>> print numpy . random . permutation ( b ) [[6 7 8] [3 4 5] [0 1 2]]
M odulo 1 Numpy
Septiembre de 2013
105 / 126
Uso de NUMPY
Ejercicios
Del 27 al 30
http://www.iaa.es/python/cientifico/ejercicios
M odulo 1 Numpy
Septiembre de 2013
106 / 126
Uso de NUMPY
Polinomios
Se gestionan a trav es de la clase Polynomial del paquete numpy.polynomial.polynomial que debe ser importado. Creaci on numpy.polynomial.polynomial.Polynomial(coef) que devuelve un objeto de tipo Polynomial. coef es una tupla que establece los coecientes del polinomio, en orden creciente. Esto es, (1, 2, 3) representa al polinomio 1 + 2 x + 3 x 2.
>>> import numpy . polynomial . polynomial as npp >>> pol = npp . Polynomial ([1 , 2 , 3]) >>> print pol poly ([ 1. 2. 3.])
M odulo 1 Numpy
Septiembre de 2013
107 / 126
Uso de NUMPY
Polinomios
Creaci on alternativa
Se puede generar un polinomio si se conocen sus ra ces. A partir de una funci on situada en el m odulo numpy.polynomial.polynomial.
Funci on polyfromroots(roots) Descripci on Genera un polinomio a partir de sus ra ces, mediante el producto (x r [0]) (x r [1]) ... (x r [n 1]) Atenci on al signo negativo en el producto.
>>> import numpy . polynomial . polynomial as npp >>> pol2 = npp . Polynomial . fromroots ([1 , -2]) >>> print pol2 poly ([ -2. 1. 1.])
M odulo 1 Numpy
Septiembre de 2013
108 / 126
Uso de NUMPY
Polinomios
Utilidad
Buscar sus ra ces. Derivarlos e integrarlos. Operar entre ellos. Realizar ajustes a datos obtenidos en una muestra. Interpolaciones.
M odulo 1 Numpy
Septiembre de 2013
109 / 126
Uso de NUMPY
Polinomios
M etodos
Descripci on Devuelve una copia del polinomio. Devuelve el grado del polinomio. Devuelve un polinomio con grado reducido a deg, descartando t erminos de orden superior. Devuelve la lista de ra ces del polinomio. Calcula la derivada m- esima del polinomio. Devuelve la integral del polinomio. m es el n umero de integraciones. k es la lista de constantes de integraci on (de menor o igual tama no que m). lbnd es el l mite inferior de la integral (si es denida).
M odulo 1 Numpy
Septiembre de 2013
110 / 126
Uso de NUMPY
polypow(c, pow)
M odulo 1 Numpy
Septiembre de 2013
111 / 126
Uso de NUMPY
>>> import numpy . polynomial . polynomial as npp >>> c1 = [0 , 2 , 3] >>> c2 = [0 , 1] >>> print npp . polyadd ( c1 , c2 ) [ 0. 3. 3.] >>> print npp . polysub ( c1 , c2 ) [ 0. 1. 3.] >>> print npp . polymul ( c1 , c2 ) [ 0. 0. 2. 3.] >>> print npp . polydiv ( c1 , c2 ) ( array ([ 2. , 3.]) , array ([ 0.]))
M odulo 1 Numpy
Septiembre de 2013
112 / 126
Uso de NUMPY
Polinomios
Ajuste
Se puede generar un polinomio mediante un ajuste por m nimos cuadrados a una nube de puntos en 2D. Se usa el m odulo numpy.polynomial.polynomial.
Funci on polyfit(x, y, deg, ) ..., full=False, w=None) Descripci on Retorna un polinomio de grado deg. x e y tienen que tener la misma dimensi on nal. Si y es 2D, se realizan m ultiples ajustes (uno por cada columna de y ). El resultado es tambi en 2D (cada columna se reere a un ajuste). deg es el grado del polinomio a ajustar. full se reere al formato de salida: False, s olo coecientes, True, coecientes e informaci on de diagn ostico ([residuals, rank, singular values, rcond]). w, se reere al peso de cada par de coordenadas (xi , yi ). Si no se da, los pesos valen 1.
M odulo 1 Numpy
Septiembre de 2013
113 / 126
Uso de NUMPY
Ajuste
Ejemplo 1
>>> x = numpy . arange ( -2 , 2 , 0.2) >>> y = numpy . power (x , 2) >>> noise = numpy . random . randn ( x . size ) >>> res = npp . polyfit (x , y + noise , 2 , full = True , \ w =1/ numpy . power ( noise , 2)) >>> print res ( array ([ -0.06632142 , 0.08804425 , 1.0504697 ]) , [ array ([ 78.97488008]) , 3 , array ([ 1.73203349 , 0.00721654 , 0.00281464]) , 4 . 4 4 0 8 9 2 0 9 8 5 0 0 6 2 6 2 e -15])
M odulo 1 Numpy
Septiembre de 2013
114 / 126
Uso de NUMPY
M odulo 1 Numpy
Septiembre de 2013
115 / 126
Uso de NUMPY
Polinomios especiales
NUMPY proporciona soporte a trav es del m odulo numpy.polynomial.polynomial para la generaci on y operaci on con polinomios especiales: 1 Chebyshev 2 Legendre 3 Laguerre 4 Hermite
Para m as informaci on, consulte la documentaci on.
REFERENCIA: http://docs.scipy.org/doc/numpy/reference/routines.polynomials.package.html
M odulo 1 Numpy
Septiembre de 2013
116 / 126
Uso de NUMPY
Ejercicios
Del 31 al 34
http://www.iaa.es/python/cientifico/ejercicios
M odulo 1 Numpy
Septiembre de 2013
117 / 126
Uso de NUMPY
Un array con m ascara es aquel que tiene elementos no v alidos (nan, inf ) o que no tienen un valor asignado (missing values ) porque el conjunto de datos es incompleto. Los arrays con m ascara se generan por combinaci on de un array de los ya conocidos y una m ascara (que no es m as que un array de booleanos). Cuando un elemento del array tiene asociado un valor de m ascara igual a False, quiere decir que ese valor es v alido (no est a enmascarado). El paquete numpy.ma se asegura de usar s olo los valores v alidos a la hora de realizar operaciones.
M odulo 1 Numpy Septiembre de 2013 118 / 126
Uso de NUMPY
>>> import numpy . ma >>> am = numpy . ma . array ([1 , 2 , 3]) >>> am masked_array ( data = [1 2 3] , mask = False , fill_value = 999999)
M odulo 1 Numpy
Septiembre de 2013
119 / 126
Uso de NUMPY
Para acceder a los datos, se usa el atributo data. Tambi en on getdata. es posible usar el m etodo array o la funci Para acceder a la m ascara se usa el atributo mask. Las otras posibilidades pasan por usar las funciones getmask y getmaskarray del m odulo.
M odulo 1 Numpy
Septiembre de 2013
120 / 126
Uso de NUMPY
Creaci on y manejo
Ejemplo 1
>>> am = numpy . ma . array ([1 , 2 , 3] , mask =[ True , False , False ]) >>> print am [ - - 2 3] >>> am . data array ([1 , 2 , 3]) >>> am . __array__ () array ([1 , 2 , 3]) >>> numpy . ma . getdata ( am ) array ([1 , 2 , 3]) >>> >>> print am . mask [ True False False ] >>> print numpy . ma . getmask ( am ) [ True False False ] >>> print numpy . ma . getmaskarray ( am ) [ True False False ]
M odulo 1 Numpy
Septiembre de 2013
121 / 126
Uso de NUMPY
Dado
>>> am = numpy . ma . array ([1 , 2 , 3] , mask =[ True , False , False ]) >>> am masked_array ( data = [ - - 2 3] , mask = [ True False False ] , fill_value = 999999)
Uso de NUMPY
Para operar con arrays con m ascara se hace lo mismo que con arrays normales
>>> x = numpy . ma . array ([1 , 2 , 3 , 4] , mask =[0 , 0 , 1 , 0]) >>> y = numpy . ma . array ([3 , -1 , 2 , 5] , mask =[0 , 0 , 1 , 1]) >>> x + y masked_array ( data = [4 1 -- - -] , mask = [ False False True True ] , fill_value = 999999)
Uso de NUMPY
Uso de NUMPY
Ejercicios
Del 35 al 36
http://www.iaa.es/python/cientifico/ejercicios
M odulo 1 Numpy
Septiembre de 2013
125 / 126
Uso de NUMPY
Y por n... .
FIN
P.D.: Nos hemos dejado mucha de la funcionalidad de NUMPY por el camino. SCIPY es un paquete que se basa en NUMPY, mejorando y ampliando algunas de sus funcionalidades. Parte de lo que falta se ver a en ese m odulo.
M odulo 1 Numpy
Septiembre de 2013
126 / 126