0% encontró este documento útil (0 votos)
241 vistas

Numpy

Este documento presenta una introducción a NumPy. Explica que NumPy es el paquete fundamental para la computación científica con Python y permite la creación y manejo de arrays multidimensionales. El tipo de dato más importante es el array (ndarray). El documento también cubre los fundamentos de NumPy, incluyendo la creación de arrays, indexación, operaciones y cambios de tipo.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
241 vistas

Numpy

Este documento presenta una introducción a NumPy. Explica que NumPy es el paquete fundamental para la computación científica con Python y permite la creación y manejo de arrays multidimensionales. El tipo de dato más importante es el array (ndarray). El documento también cubre los fundamentos de NumPy, incluyendo la creación de arrays, indexación, operaciones y cambios de tipo.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 137

M

odulo 1 Numpy
Curso de Python Cientfico
Cesar Husillos Rodrguez
IAA-CSIC

Septiembre de 2014
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

1 / 137

Indice

1
2
3
4

C
esar Husillos Rodrguez (IAA-CSIC)

Antes de empezar...
Introduccion
Fundamentos
Uso de NUMPY

M
odulo 1 Numpy

Septiembre de 2014

2 / 137

Antes de empezar...

Indice

1
2
3
4

C
esar Husillos Rodrguez (IAA-CSIC)

Antes de empezar...
Introduccion
Fundamentos
Uso de NUMPY

M
odulo 1 Numpy

Septiembre de 2014

3 / 137

Antes de empezar...

Antes de empezar
Version de NUMPY

La version estable de NUMPY a fecha de hoy es la (1.9).


El codigo esta probado para la version v1.7.1.
Si tiene algun problema relacionado con la compatibilidad, puede
actualizar su version 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 tambien)
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

4 / 137

Antes de empezar...

Antes de empezar
Lo obvio

Estas transparencias son solo un resumen de NUMPY.


Muchas de las funciones que se mencionan aqu,
disponen de mas parametros que los mostrados.
Hemos seleccionado los fundamentales.
Seguramente, surgiran multiples dudas a lo largo de
la explicacion. Como programadores con experiencia
que somos en PYTHON, es conveniente que
manejemos con soltura la ayuda, bien desde el
interprete o a traves de la web.
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

5 / 137

Antes de empezar...

Antes de empezar
Uso de la ayuda

Recordatorio sobre la consulta de ayuda


Una forma de acceder a la documentacion desde el interprete
de PYTHON es con el comando help:
help(modulo) o help(modulo.funci
on)
Las webs de referencia son:
https://docs.python.org/2.7/ (PYTHON)
http://docs.scipy.org/doc/numpy/reference/ (NUMPY)

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

6 / 137

Antes de empezar...

Editando codigo
Lnea de comandos

Para ejecutar de forma interactiva usamos el interprete de


python (comando python).
Si tenemos la posibilidad de instalar ipython tendremos
mucho ganado: por ejemplo, la opcion de autocompletado
elimina muchos de los errores que se producen al escribir
codigo.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

7 / 137

Antes de empezar...

Editando codigo
Editores de texto

Cuando el script tiene que hacer operaciones complejas,


esta compuesto por muchas lneas, o se quiere ejecutar
multiples veces con diferentes parametros de entrada, lo mas
comodo es escribir el programa en un fichero *.py.
Otra ventaja que supone esta forma de trabajo es la correccion
de errores, cambiando solo la lnea donde se da el error sin
tener que reescribir todo el codigo.
Los editores disponibles dependen de la plataforma: emacs,
gedit, notepad, ... Cada programador tiene sus preferencias
en funcion de su experiencia y conocimiento.
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

8 / 137

Antes de empezar...

Editando codigo
Entornos de Desarrollo Integrado (IDE)

Son aplicaciones que facilitan la generacion, depurado y


ejecucion de codigo.
Disponen de: editor con resaltado de sintaxis, autocompletado
de comandos, ayuda dinamica, capacidad de ejecutar el script
o unas pocas lneas, 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 multiples plataformas desde el enlace
code.google.com/p/spyderlib/
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

9 / 137

Antes de empezar...

Editando codigo
Entornos de desarrollo intergrado (IDE)

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

10 / 137

Introducci
on

Indice

1
2
3
4

C
esar Husillos Rodrguez (IAA-CSIC)

Antes de empezar...
Introduccion
Fundamentos
Uso de NUMPY

M
odulo 1 Numpy

Septiembre de 2014

11 / 137

Introducci
on

Introduccion
Que es NUMPY?

NUMPY es el paquete fundamental para el trabajo de


computacion cientfica con PYTHON. Contiene
1
2

Tipos de datos
Clases

3
4

Funciones
Modulos

que posibilitan la creacion y manejo de arrays


n-dimensionales.
El tipo de dato mas importante es el array (o
ndarray, de n-dimensional array).
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

12 / 137

Introducci
on

Introduccion
Ventajas

1
2

Multiplataforma.
Potente conjunto de libreras.
Puede clonar la funcionalidad de cualquier otro
paquete de calculo numerico (MATEM
ATICA, MATLAB)
Perfecta integraci
on con el Core de PYTHON.
Interactua con los tipos de datos y estructuras
propios del lenguaje.

Se pueden crear arrays de NUMPY a partir de estructuras de PYTHON.


4

Gratuito.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

13 / 137

Introducci
on

Introduccion
Que vamos a aprender en este M
odulo?

Fundamentos sobre NUMPY: creacion de arrays,


indexacion, operaciones (aritmeticas, relacionales y
logicas), cambio de tipo de datos y valores
especiales.
Aplicaciones de NUMPY al tratamiento de datos
cientficos: seleccion, ordenacion, ajustes,
interpolaciones, estadstica, polinomios, funciones
matematicas, arrays con mascaras, ...

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

14 / 137

Fundamentos

Indice

1
2
3
4

C
esar Husillos Rodrguez (IAA-CSIC)

Antes de empezar...
Introduccion
Fundamentos
Uso de NUMPY

M
odulo 1 Numpy

Septiembre de 2014

15 / 137

Fundamentos

Arrays
Definici
on

Un array es...
Un tipo de dato compuesto a partir de tipos de
datos sencillos.
Estan ordenados segun una secuencia definida.
Como en una lista o una tupla?
- S en cuanto al requisito de ordenacion.
- No en cuanto al contenido, porque solo admite un tipo
de dato por array.
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

16 / 137

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 float64
Decimal en precisi
on simple.
Decimal en doble precisi
on.
Atajo a complex128
N
umero complejo, parte entera e imaginaria con float32
N
umero complejo, parte entera e imaginaria con float64

Los tipos se referencian como cadena (int) o como constante numpy (numpy.int).
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

17 / 137

Fundamentos

Arrays
Propiedades

Un array es un objeto y tiene propiedades (y metodos):


Propiedad

Descripci
on

ndarray.shape
ndarray.ndim
ndarray.size
ndarray.itemsize
ndarray.nbytes
ndarray.dtype
ndarray.real
ndarray.imag

Tupla con las dimensiones.


Numero de dimensiones.
Numero de elementos.
Tamano de uno de los elementos en bytes.
Tamano total ocupado por los elementos.
Tipo de dato de los elementos.
Parte real.
Parte imaginaria.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

18 / 137

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
C
esar Husillos Rodrguez (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 2014

19 / 137

Fundamentos

Manejo basico
Indice

Creacion.

Indexacion.

Operaciones aritmeticas (reglas de broadcasting), relacionales


y logicas.

Cambio de tipo (casting).

Valores especiales (nan e inf).

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

20 / 137

Fundamentos

Manejo basico
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 fichero.
4
Copiando otro array.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

21 / 137

Fundamentos

Creacion de arrays
1. Uso tipos de dato nativos de PYTHON

numpy.array(secuencia, tipo dato)


>>> import numpy
>>> numpy . array ([1 , 5 , 4.3 , 1+3 j ]) # casting i m p l i c i t o
array ([ 1 , 5 , 4.3 , (1+3 j ) ] , dtype = | S6 )
>>> tupla = (3 , 5 , 7.7)
>>> a2 = numpy . array ( tupla )
>>> a2
array ([ 3. , 5. , 7.7])
>>> a3 = numpy . array ([])
>>> a3
array ([] , dtype = float64 )
>>> a4 = numpy . array ([ linea1 , linea2 , 33] , dtype = | S3 )
array ([ lin , lin , 33 ] ,
dtype = | S3 )
>>> # casting e x p l i c i t o

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

22 / 137

Fundamentos

Creacion de arrays
1. Uso tipos de dato nativos de PYTHON

Usando una lista de listas.


Arrays n-dimensionales
>>>a = numpy . array ([[1 , 2 , 3 , 4] ,[5 , 6 , 7 , 8] , [9 , 10 , 11 , 12]] , \
dtype = numpy . int )
>>> a . shape
(3 , 4)
>>> a
array ([[ 1 , 2 , 3 , 4] ,
[ 5 , 6 , 7 , 8] ,
[ 9 , 10 , 11 , 12]])

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

23 / 137

Fundamentos

Creacion de arrays
2. Mediante el uso de funciones de NUMPY

numpy.arange([start], stop[, step], dtype=None)


Equivalente a la funcion range(start, stop, step) de
PYTHON.
A tener en cuenta...
1. El step puede ser decimal (novedad!!).
2. El extremo final 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])
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

5.4 ,

5.5 ,

Septiembre de 2014

24 / 137

Fundamentos

Creacion de arrays
2. Mediante el uso de funciones de NUMPY

numpy.linspace(start, stop, num=50,


endpoint=True, retstep=False)
Devuelve un array en el que se ha dividido el intervalo [start,
stop] (endpoint=True, por defecto) en num fragmentos.
>>> numpy . linspace (5 , 6 , 5)
array ([ 5. , 5.25 , 5.5 , 5.75 , 6. ])
>>> numpy . linspace (5 , 6 , 5 , False , True )
( array ([ 5. , 5.2 , 5.4 , 5.6 , 5.8]) , 0.2)

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

25 / 137

Fundamentos

Creacion 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]])
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

26 / 137

Fundamentos

Creacion de arrays
2. Mediante el uso de funciones de NUMPY

numpy.zeros(shape, dtype=float)
Exactamente el mismo comportamiento que
numpy.ones.
>>> numpy . zeros ((2 ,3 ,4))
array ([[[ 0. , 0. , 0. , 0.] ,
[ 0. , 0. , 0. , 0.] ,
[ 0. , 0. , 0. , 0.]] ,
[[ 0. ,
[ 0. ,
[ 0. ,
C
esar Husillos Rodrguez (IAA-CSIC)

0. ,
0. ,
0. ,

0. ,
0. ,
0. ,

0.] ,
0.] ,
0.]]])

M
odulo 1 Numpy

Septiembre de 2014

27 / 137

Fundamentos

Creacion de array
3. Lectura de ficheros

La funcion de lectura y sus parametros dependen del formato del


fichero.
Supongamos el fichero 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 lnea contiene el nombre de los campos.

Las siguientes, los valores de cada objeto, separados por ,.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

28 / 137

Fundamentos

Creacion de arrays
3. Lectura de ficheros

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)
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

29 / 137

Fundamentos

Creacion de arrays
4. Mediante copia de otro array

Para copiar un array, basta con asignarlo a otra variable.


>>> a = numpy . arange (3)
>>> b = a # asignacion peligrosa !!
>>> b [0] = -3
>>> b
array ([ -3 , 1 , 2])
>>> a
array ([ -3 , 1 , 2])

Copia y original comparten memoria.


ATENCION:
Este tipo de copia se denomina copia por referencia.
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

30 / 137

Fundamentos

Creacion 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 operacion con el otro.
Usar la funcion copy de NUMPY.
Este tipo de copia se denomina copia por valor.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

31 / 137

Fundamentos

Creacion de arrays
4. Mediante copia de otro array

Mediante operacion ...

Metodo/Funcion copy...

>>> 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])

>>> 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])

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

32 / 137

Fundamentos

Manejo basico de arrays


Indexaci
on

Se refiere a la seleccion de elementos concretos


del array.
A tener en cuenta...
Se accede a un elemento del array dando su posici
on en el
array, mediante un ndice entero entre corchetes ([])
nombre array[posicion]
El primer ndice es el 0 (como en C/C++).
Si el ndice es mayor que el numero de elementos de array,
lanzar
a una excepci
on (IndexError).
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

33 / 137

Fundamentos

Indexacion
Posibilidades

Tipo de selecci
on
Un solo elemento
Varios elementos consecutivos
Elementos en orden cualesquiera

Sintaxis
array[posicion]
array[inicio:fin]
array[[p1, p2,..., pn]]

(Novedad respecto a PYTHON Core.)

donde [p1, ,...,pn] es una lista o array.

Recordatorio
Los ndices pueden tomar valores negativos. Al igual que en las
secuencias de PYTHON cuentan las posiciones desde el final del array.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

34 / 137

Fundamentos

Indexacion
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!.
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

35 / 137

Fundamentos

Ejercicios

Ejercicios 1, 2, 3 y 4
http://www.iaa.es/python/cientifico/ejercicios/numpy

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

36 / 137

Fundamentos

Complicando un poco...

Arrays N-dimensionales

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

37 / 137

Fundamentos

Arrays n-dimensionales
Creaci
on

Se pueden crear desde cero como hemos visto.


Usando la funcion array y pasandole una lista/tupla de
listas/tuplas.
Usando funciones NUMPY que tengan el parametro shape.
Leyendo desde fichero.
Copiando/extrayendo submatriz de otro array.
O se puede modificar un array existente, haciendo uso de la
propiedad shape o del metodo reshape.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

38 / 137

Fundamentos

Arrays n-dimensionales
Creaci
on

Creacion ad-hoc
>>> numpy . ones ((2 , 3))
array ([[ 1. , 1. , 1.] ,
[ 1. , 1. , 1.]])

Uso de la propiedad shape


>>> a = numpy . ones (10)
>>> a . shape
(10 ,)
>>> a . shape = [2 ,5]
>>> a
array ([[ 1. , 1. , 1. ,
[ 1. , 1. , 1. ,

C
esar Husillos Rodrguez (IAA-CSIC)

1. ,
1. ,

1.] ,
1.]])

M
odulo 1 Numpy

Septiembre de 2014

39 / 137

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

Atencion a las dimensiones finales


>>> c = a . reshape ((3 ,4))
ValueError : total size of new array must be unchanged

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

40 / 137

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 combinacion de ndices va entre corchetes tras el
nombre del array.
nombreArray[indexDim1, indexDim2, ...,
indexDimN]

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

41 / 137

Fundamentos

Arrays n-dimensionales
Indexado

El operador : sustituye a todo el rango de ndices


posibles en la dimension en la que aparece.
>>> a = numpy . linspace (0 , 1 , 5)
>>> a
array ([ 0. , 0.25 , 0.5 , 0.75 , 1.
>>> a [:]
array ([ 0. , 0.25 , 0.5 , 0.75 , 1.
>>> b = numpy . arange (4). reshape ((2 ,2))
>>> b
array ([[0 , 1] ,
[2 , 3]])
>>> b [: ,1]
array ([1 , 3])
>>> b [0 , :]
array ([0 , 1])

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

])
])

Septiembre de 2014

42 / 137

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]]])

>>> a [0]

# 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

Pregunta...
Que resultado obtendra si escribo a[1,1:3,:2]?
(Tomese su tiempo y escriba la respuesta en un papel)
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

43 / 137

Fundamentos

Indexado
Arrays n-dimensionales

Respuesta
>>> a
array ([[[ 0 ,
[ 4,
[ 8,

1 , 2 , 3] ,
5 , 6 , 7] ,
9 , 10 , 11]] ,

[[12 , 13 , 14 , 15] ,
[16 , 17 , 18 , 19] ,
[20 , 21 , 22 , 23]]])
>>> a [1 ,1:3 ,:2]
array ([[16 , 17] ,
[20 , 21]])
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

44 / 137

Fundamentos

Ejercicios

Ejercicios 5, 6 y 7
http://www.iaa.es/python/cientifico/ejercicios/numpy

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

45 / 137

Fundamentos

Otras alternativas para cambiar la


formade un array
Algo parecido a lo que hacamos con las listas de PYTHON:
Funci
on
numpy.insert(arr, obj,
values, axis=None)
numpy.append(arr,
values, axis=None)
numpy.delete(arr,
obj, axis=None)

Descripci
on
Inserta en las posiciones dadas por obj del eje axis,
los valores values (escalar o secuencia).
Agrega al final del array arr en el eje axis el valor o
valores dados por values (escalar o secuencia).
Devuelve un array en el que se han borrado los elementos
dados por los ndices obj del eje axis.

>>> a = numpy . arange (3)


>>> print numpy . insert (a , (0 , -1) , -1)
[ -1 0 1 -1 2]
>>> print numpy . append (a , -3)
[ 0 1 2 -3]
>>> print numpy . delete (a , 0)
[1 2]
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

46 / 137

Fundamentos

Otras alternativas para cambiar la


formade un array
Metodo
array.flatten(order=C)
M
etodo que permite cambiar de un array n-dimensional a otro 1D.
>>> a = numpy . arange (6). reshape ((3 , 2))
>>> print a
[[0 1]
[2 3]
[4 5]]
>>> print a . flatten ( order = " C " )
[0 1 2 3 4 5]
>>> print a . flatten ( order = " F " )
[0 2 4 1 3 5]

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

47 / 137

Fundamentos

Otras alternativas para cambiar la


formade un array
Funcion
numpy.ravel(array, order=C)
Funci
on que permite cambiar de un array n-dimensional a otro 1D.
>>> a = numpy . arange (10). reshape ((5 ,2))
>>> print a
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
>>> print numpy . ravel (a , order = " C " )
[0 1 2 3 4 5 6 7 8 9]
>>> print numpy . ravel (a , order = " F " )
[0 2 4 6 8 1 3 5 7 9]
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

48 / 137

Fundamentos

Otras alternativas para cambiar la


formade un array
Funcion de concatenacion de arrays.
Funcion
numpy.concatenate((a1, a2, ...), axis=0)
con
(a1, a2, ...) una secuencia de arrays. Su shape debe
coincidir, a excepcion de la dimension dada por axis.
axis es la dimension donde se van a unir los arrays.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

49 / 137

Fundamentos

Otras alternativas de cambiar la


formade un array
>>>
>>>
(2 ,
>>>
>>>
(1 ,
>>>
[[1
[3
[5
>>>
(2 ,
>>>
[[1
[3

a = numpy . array ([[1 , 2] , [3 , 4]])


print a . shape
2)
b = numpy . array ([[5 , 6]]) # < - - - A T E N C I O N
print b . shape
2)
print numpy . concatenate (( a , b ) , axis =0)
2]
4]
6]]
print b . T . shape
1)
print numpy . concatenate (( a , b . T ) , axis =1)
2 5]
4 6]]

NOTA: b.T retorna la traspuesta del array b.


C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

50 / 137

Fundamentos

Otras alternativas para cambiar la


formade un array
Matiz importante: los arrays creados segun las
instrucciones
a = numpy.array([1, 2, 3])
b = numpy.array([[1, 2, 3]])
son muy diferentes. Por que?.
Porque las dimensiones de uno y otro array son diferentes.
A la hora de concatenar, el numero de dimensiones de los arrays
deben ser las mismas.
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

51 / 137

Fundamentos

Otras alternativas para cambiar la


formade un array

>>> import numpy


>>> a . shape
(3 ,) # array UNI - d i m e n s i o n a l
>>> b . shape
(1 , 3) # array BI - d i m e n s i o n a l
>>> c = numpy . zeros ((3 ,3))
>>> numpy . concatenate (( a , c ))
--------------------------------------------------------------------ValueError
Traceback ( most recent call
/ home / cesitar / < ipython - input -8 -20 d5230b6aed > in < module >()
----> 1 numpy . concatenate (( a , c ))
ValueError : arrays must have same number of dimensions
>>> numpy . concatenate (( b , c ))
array ([[ 1. , 2. , 3.] ,
[ 0. , 0. , 0.] ,
[ 0. , 0. , 0.] ,
[ 0. , 0. , 0.]])
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

52 / 137

Fundamentos

Otras alternativas para cambiar la


formade un array
Funci
on
numpy.hstack(seq)
numpy.vstack(seq)

Descripci
on
Apila los arrays de la secuencia seq horizontalmente (agrega
columnas).
Apila los arrays de la secuencia seq verticalmente (agrega filas).

>>> 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]]
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

53 / 137

Fundamentos

Otras alternativas para cambiar la


formade un array
Funci
on
numpy.hsplit(array,
escalar|seq)
numpy.vsplit(array,
escalar|seq))

Descripci
on
Divide array en subarrays por columnas. Misma forma de subarray
si se da escalar. Corta por las columnas dadas en seq.
Divide en subarrays por filas.

>>> a = numpy . array ([[1 , 2 , 3] , [4 , 5 , 6] , [7 , 8 , 9]])


>>> print numpy . vsplit (a , 2)
...
ValueError : array split does not result in an equal division
>>> print numpy . vsplit (a , (1 ,2))
[ array ([[1 , 2 , 3]]) , array ([[4 , 5 , 6]]) , array ([[7 , 8 , 9]])]
>>> print numpy . hsplit (a , (1 ,))
[ array ([[1] ,
[4] ,
[7]]) , array ([[2 , 3] ,
[5 , 6] ,
[8 , 9]])]
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

54 / 137

Fundamentos

Ejercicios

Ejercicios 8 y 9
http://www.iaa.es/python/cientifico/ejercicios/numpy

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

55 / 137

Fundamentos

Operaciones aritmeticas
Supongamos que quiero sumar un numero a un array.
Como se hace?.
Caso de listas PYTHON
>>>
>>>
>>>
>>>
...
>>>
[4 ,
>>>
>>>

inicial = [1 , 3 , 6 , -1]
# sumar 3
final = list ()
for elem in inicial :
final . append ( elem + 3)
final
6 , 9 , 2]
o mas pythonicamente
final = [ elem + 3 for elem in inicial ]

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

56 / 137

Fundamentos

Operaciones aritmeticas
En el caso de arrays, la simplificacion es notable.
>>> a_inicial = numpy . array ([1 , 3 , 6 , -1] , dtype = int )
>>> a_inicial
array ([ 1 , 3 , 6 , -1])
>>> a_final = a_inicial + 3
>>> a_final
array ([4 , 6 , 9 , 2])

para listas PYTHON


>>> inicial = [1 , 3 , 6 , -1]
>>> final = inicial + 3
TypeError : can only concatenate list ( not " int " ) to list

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

57 / 137

Fundamentos

Operaciones aritmeticas
Podemos +, -, * y / cualquier array con un numero.
Tendremos problemas si realizamos operaciones de valor
no definido.
Resultados no definidos
>>> a = numpy . arange (4)
>>> print a
[0 1 2 3]
>>> b = a /0.
>>> print b
[ nan inf inf inf ]

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

58 / 137

Fundamentos

Operaciones aritmeticas
Entre arrays

Para arrays con id


enticas dimensiones: Las operaciones se
realizan entre cada par de elementos que ocupan la misma posicion.
Resultados no definidos
>>> op1 = numpy . zeros ([2 ,3]) + 3
>>> op2 = numpy . array ([[0 ,1 ,2] ,[3 ,4 ,5]])
>>> op1
array ([[ 3. ,
[ 3. ,
>>> op2
array ([[0 , 1 ,
[3 , 4 ,
>>> op1 * op2
array ([[ 0. ,
[ 9. ,

3. ,
3. ,

3.] ,
3.]])

2] ,
5]])
3. ,
12. ,

C
esar Husillos Rodrguez (IAA-CSIC)

6.] ,
15.]])

M
odulo 1 Numpy

Septiembre de 2014

59 / 137

Fundamentos

Operaciones aritmeticas
Entre arrays

Cuando los arrays tienen formas y dimensiones diferentes hay que


andarse con cuidado.
El termino broadcasting se emplea para describir la forma en la que
NUMPY trata las operaciones entre arrays de diferente shape.
Reglas de broadcasting
1

El numero de dimensiones no tiene por que ser el mismo.

Es posible cuando las dimensiones finales son iguales.

Vale cuando una de las dimensiones finales es 1.

En caso de intentar hacer una operacion imposible, se lanza una


excepcion del tipo ValueError.
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

60 / 137

Fundamentos

Operaciones aritmeticas
Entre arrays

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

61 / 137

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)
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

62 / 137

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 ]
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

63 / 137

Fundamentos

Operaciones Logicas
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 logicos
& (y/AND logico)
| (o/OR logico)
(no/NOT logico). Este operador es unario (solo necesita
un operando).
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

64 / 137

Fundamentos

Operaciones logicas
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 ]

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

65 / 137

Fundamentos

Funciones relacionales y logicas de NUMPY


Funci
on
all(a[, axis])
any(a[, axis])

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)
C
esar Husillos Rodrguez (IAA-CSIC)

Descripci
on
Testeo de valor True
Comprueba si todos los elementos del eje axis del
array son True.
Comprueba si alg
un elemento del eje axis del array es
True.
Relacionales
Devuelve True si los arrays tienen sus elementos
iguales dentro de un intervalo de tolerancia.
True si dos arrays tienen la misma forma y elementos.
False en caso contrario.
Devuelve el valor de la comparaci
on (x1 > x2) elemento
a elemento.
Devuelve el valor de la comparaci
on (x1 >= x2)
elemento a elemento.
Devuelve el valor de la comparaci
on (x1 < x2)
elemento a elemento.
Devuelve el valor de la comparaci
on (x1 <= x2)
elemento a elemento.
Devuelve (x1 == x2) elemento a elemento.
Devuelve (x1! = x2) elemento a elemento.
M
odulo 1 Numpy

Septiembre de 2014

66 / 137

Fundamentos

Funciones relacionales y logicas de NUMPY

Funci
on
logical and(x1, x2)
logical or(x1, x2)
logical not(x)

C
esar Husillos Rodrguez (IAA-CSIC)

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 2014

67 / 137

Fundamentos

Funciones NUMPY relacionales y logicas


Ejemplo 1

>>> 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 ]

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

68 / 137

Fundamentos

Funciones NUMPY relacionales y logicas


Ejemplo 1

>>> a = numpy . arange (4)


>>> b = numpy . array ([0 , 1 , 2.2 , 3.1])
>>> print numpy . array_equal (a , b )
False
>>> print numpy . array_equal (a , a )
True
>>> print numpy . greater (a , b )
[ False False False False ]
>>> print numpy . greater_equal (a , b )
[ True True False False ]
>>> print numpy . less (a , b )
[ False False True True ]
>>> print numpy . less_equal (a , b )
[ True True True True ]
>>> print numpy . equal (a , b )
[ True True False False ]
>>> print numpy . not_equal (a , b )
[ False False True True ]
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

69 / 137

Fundamentos

Consulta de tipos de datos


La forma mas sencilla es a traves de la propiedad dtype.
>>> a = numpy . arange (4)
>>> print a . dtype
int64
>>> a . dtype
dtype ( int64 )
>>> a . dtype . name
int64
Otras formas incluyen el uso de funciones NUMPY.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

70 / 137

Fundamentos

Consulta de tipos de datos


Funciones NUMPY
Funci
on
iscomplex(x)
iscomplexobj(x)
isreal(x)
isrealobj(x)
isscalar(num)

Descripci
on
Devuelve un array de booleanos, con True para los elementos complejos.
Comprueba el tipo complejo para un array. True si es complejo.
Devuelve un array de booleanos, con True en aquellas posiciones donde
el elemento es real.
Devuelve True si x no es de tipo complejo o un array de n
umeros
complejos.
Devuelve True si el tipo de num es escalar.

>>> 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)
C
eTrue
sar Husillos Rodrguez (IAA-CSIC)
M
odulo 1 Numpy

Septiembre de 2014

71 / 137

Fundamentos

Cambio de tipo de dato en un array


Procedimiento conocido como casting de tipos.
Imaginemos que leo un fichero y tengo el array
>>> a
array ([ 1 , 2 , 3 , 4 ] ,
dtype = | S1 )

Que sucede si intento sumar el numero entero 2?


>>> a + 2
TypeError : unsupported operand
type ( s ) for +: numpy . ndarray and int
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

72 / 137

Fundamentos

Cambio de tipo de dato en un array


Lo que vemos es que tenemos la informacion que
queremos, pero el tipo no es correcto.
Solucionamos cambiando el tipo. Procedimientos:
1
Volvemos a generar el array con
numpy.array(..., dtype=typeNumpy)
2
Usamos la funcion de NUMPY:
numpy.typeNumpy(array)
3
Usamos el metodo de los arrays:
nombrearray.astype(typeNumpy)
typeNumpy es cualquiera de dados en la transparencia
17.
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

73 / 137

Fundamentos

Cambio de tipo de dato en un array


Generamos nuevo array
>>> a . dtype
dtype ( S1 )
>>> a1 = numpy . array (a , dtype = int )
>>> a1 . dtype
dtype ( int64 )
>>> # otra forma de escribir el tipo
>>> a2 = numpy . array (a , dtype = numpy . float32 )
>>> a2 . dtype
dtype ( float32 )

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

74 / 137

Fundamentos

Cambio de tipo de dato en un array


Funciones/metodos de cambio de tipo
>>> a
array ([ 1 , 2 , 3 , 4 ] ,
dtype = | S1 )
>>> a3 = numpy . complex64 ( a )
>>> a3
array ([ 1.+0. j , 2.+0. j , 3.+0. j ,
4.+0. j ] , dtype = complex64 )
>>> a4 = a . astype ( int8 )
>>> a4 . dtype
dtype ( int8 )

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

75 / 137

Fundamentos

Ejercicios

Del 10 al 15
http://www.iaa.es/python/cientifico/ejercicios/numpy

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

76 / 137

Uso de NUMPY

Indice

1
2
3
4

C
esar Husillos Rodrguez (IAA-CSIC)

Antes de empezar...
Introduccion
Fundamentos
Uso de NUMPY

M
odulo 1 Numpy

Septiembre de 2014

77 / 137

Uso de NUMPY

ESQUEMA
1
2
3
4
5
6
7
8
9
10

Metodos de entrada/salida
Ordenacion
Busquedas
Matematicas
Estadstica basica
Correlaciones y covarianzas
Muestreo aleatorio
Polinomios
Ajustes
Arrays con mascaras

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

78 / 137

Uso de NUMPY

Metodos de Entrada/Salida
ndarray.tolist()
ndarray.tofile(fid[
,sep,format])

numpy.fromfile(file[
,dtype=float,
count=-1, sep=])

ndarray.dump(file)
ndarray.dumps()

C
esar Husillos Rodrguez (IAA-CSIC)

Devuelve el array como una lista.


Escribe el array en un fichero, en formato texto
o binario (defecto).
- fid, puede ser un objeto fichero con permiso de escritura o
una cadena de caracteres con la ruta al fichero.
Lee ficheros escritos con ndarray.tofile
- fid, puede ser un objeto fichero con permiso de lectura o
una cadena de caracteres con la ruta.
- count, numero de lineas a leer (-1, todo el fichero)
- sep, separador de campos ( indica fichero binario)
Vuelca la serializaci
on del array al fichero file. 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.

M
odulo 1 Numpy

Septiembre de 2014

79 / 137

Uso de NUMPY

Metodos de Entrada/Salida

El volcado de arrays en fichero es util


cuando se trabaja siempre con el mismo conjunto de
datos (aceleramos su lectura)
cuando se quiere almacenar datos durante la
ejecucion de un script.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

80 / 137

Uso de NUMPY

Metodos 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 ?\
>>> b = numpy . fromfile ( binario . dat )
>>> b
array ([ 0. , 0.2 , 0.4 , 0.6 , 0.8])

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

81 / 137

Uso de NUMPY

Metodos de Entrada/Salida
Ejemplo de I/O

>>> a = numpy . arange (0 , 1 , 0.2)


>>> 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])

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

82 / 137

Uso de NUMPY

Metodos de Entrada/salida
Funcion numpy.genfromtxt

Generica y potente de carga de datos desde fichero 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 mas en cuanto a lectura de ficheros en un formato no
nativo PYTHON/NUMPY.
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

83 / 137

Uso de NUMPY

Metodos de Entrada/salida
Funcion numpy.genfromtxt

Parametros mas importantes:


fname, nombre del fichero.
dtype, tipo de datos a leer. Si se da el valor None, la funci
on elige el tipo que mejor se
ajuste a cada columna.
comments, car
acter usado como comentario. Todo lo que venga detr
as se ignora.
delimiter, cadena usada para separar campos.
skip header, n
umero de lneas a ignorar al principio del fichero.
skip footer, n
umero de lneas a ignorar al final del fichero.
missing values, conjunto de cadenas que corresponden a valores perdidos.
filling values, conjunto de valores usados para sustituir a los valores perdidos.
usecols, (lista/tupla) ndices de las columnas que se van a usar (empiezan en 0).
names, (NoneTruestringsequence Nombres con los que identificar las columnas.
Si es True, lee la primera columna tras skip header y toma los nombre de all. si es una
cadena, los nombres se separan por comas.
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

84 / 137

Uso de NUMPY

Metodos de Entrada/salida
Funcion numpy.genfromtxt

Parametros mas importantes:


excludelist, lista de nombres a excluir. Ya incluye [return,file,print].
deletechars, cadena con caracteres a eliminar de los nombres.
autostrip, booleano que indica si se quitan espacios al principio y al final de las
cadenas de texto.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

85 / 137

Uso de NUMPY

Funcion numpy.genfromtxt
Ejemplo 1

Para los ejercicios que siguen, usaremos los datos del fichero
NucleosPoblacion.csv, disponible en la web del curso.
Es un fichero en formato texto.
la primera lnea contiene los nombres de los campos.
El caracter 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
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

86 / 137

Uso de NUMPY

Ejercicios

Ejercicio 16
http://www.iaa.es/python/cientifico/ejercicios/numpy

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

87 / 137

Uso de NUMPY

Ordenacion de arrays
Toda la informacion se maneja mejor cuando hay algun tipo de
ordenacion.
NUMPY proporciona rutinas para ordenar arrays, sean del tipo o
dimension que sean.
Funci
on
numpy.sort(a, axis=-1)

numpy.argsort(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 ordenara el original
de menor a mayor seg
un axis dado. Si axis=None,
transforma a 1D y retorna los ndices.

NOTA:
En un array 2D, axis=0 corresponde a filas, axis=1 a columnas.
En un array 3D, axis=0 corresponde a profundidad, axis=1 a filas y axis=2 a
columnas.
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

88 / 137

Uso de NUMPY

Ordenacion 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])

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

89 / 137

Uso de NUMPY

Busqueda en arrays
Se buscan elementos en funcion de uno o varios criterios.
Esos criterios se combinan mediante funciones u operadores logicos,
resultando en un array de booleanos.
numpy.where(condici
on,
a1, a2)

numpy.extract(condici
on, a)

numpy.compress(condici
on, a,
axis=None)

C
esar Husillos Rodrguez (IAA-CSIC)

- condici
on es un array de booleanos.
Devuelve un array con los elementos de a1 donde la
condici
on es cierta y los de a2 si 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 2014

90 / 137

Uso de NUMPY

Busqueda 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 # m u l t i p l o de 3
>>> 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])

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

91 / 137

Uso de NUMPY

Busqueda 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]])

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

92 / 137

Uso de NUMPY

Busqueda en arrays
Valores especiales

Funci
on
argmax(a[, axis=None])
nanargmax(a[, axis=None])
argmin(a[, axis=None])
nanargmin(a[, axis=None])
nonzero(a)

flatnonzero(a)

C
esar Husillos Rodrguez (IAA-CSIC)

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. (axis=None, todo el array.)
Devuelve los ndices de los valores iguales al mnimo seg
un el
eje axis. (axis=None, en todo el array.)
Devuelve los ndices de los valores iguales al mnimo seg
un el
eje axis. Ignora los NaNs. (axis=None, 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.

M
odulo 1 Numpy

Septiembre de 2014

93 / 137

Uso de NUMPY

Busqueda en arrays

Funci
on
nonzero(a)
isnan(a)

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 infinite
- False en caso contrario.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

94 / 137

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 )
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

95 / 137

Uso de NUMPY

Ejercicios

Del 17 al 21
http://www.iaa.es/python/cientifico/ejercicios/numpy

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

96 / 137

Uso de NUMPY

Operaciones matematicas
Trigonom
etricas
sin(x)
cos(x)
tan(x)
arcsin(x)
arccos(x)
arctan(x)
hypot(x, y)
degrees(x)
radians(x)
deg2rad(x)
rad2deg(x)

Redondeo
around(a[, decimals])
round (a[, decimals,])
rint(x)
fix(x)
floor(x)
ceil(x)
trunc(x)
Hyperb
olicas
sinh(x)
cosh(x)
tanh(x)
acrsinh(x)
arctan(x)

Exp & Logs


exp(x)
exp1m(x)
exp2(x)
log(x)
log10(x)
log2(x)
log1p(x)
Miscel
anea
sqrt(x)
power(x)
fbas(x)
sign(x)
nan to num(x)

Sum. & Prod. & Diff.


prod(a[, axis])
sum(a[, axis])
nansum(a[, axis]))
cumprod(a[, axis])
cumsum(a[, axis])
gradient(f, *varargs)
cross(a, b)

x e y son arrays. Las operaciones se realizan elemento a elemento.


Las entradas a funciones trigometricas que requieran de angulos se
dan en radianes.
REFERENCIA: http://docs.scipy.org/doc/numpy/reference/routines.math.html
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

97 / 137

Uso de NUMPY

Estadstica basica
De ordenaci
on
Funci
on
numpy.amin(a, axis=None)
numpy.amax(a, axis=None)
numpy.nanmin(a, axis=None)

numpy.nanmax(a, axis=None)

numpy.ptp(a, axis=None)

numpy.percentile(a, q, axis=None)

Descripci
on
Devuelve un array (o escalar) con el valor mnimo
del array a lo largo del eje dado por axis.
Devuelve un array (o escalar) con el valor m
aximo
del array a lo largo del eje dado por axis.
Devuelve un array (o escalar) con el valor mnimo
del array a lo largo del eje dado por axis.
Ignora los valores NaN.
Devuelve un array (o escalar) con el valor m
aximo
del array a lo largo del eje dado por axis.
Ignora los valores NaN.
Devuelve el rango de valores (m
aximo - mnimo)
en el axis dado. El nombre de esta funci
on viene
del acr
onimo peak to peak.
Calcula y devuelve el percentil q-
esimo del array a
en el eje axis especificado. q (escalar) en [0,100].

NOTA: Si axis=None, se trabaja sobre la version transformada a 1D


del array, devolviendo un unico valor (escalar) para todo el array.
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

98 / 137

Uso de NUMPY

Estadstica basica
Ejemplo 1
>>> a = numpy . array ([[5 , 6 , 1] , [2 , 3 , 8]])
>>> print a
[[5 6 1]
[2 3 8]]
>>> print numpy . amax ( a )
8
>>> print numpy . amax (a , axis =0)
[5 6 8]
>>> print numpy . amax (a , axis =1)
[6 8]
>>> print numpy . percentile (a , 25)
2.25
>>> print numpy . percentile (a , 25 , axis =0)
[ 2.75 3.75 2.75]
>>> print numpy . percentile (a , 25 , axis =1)
[ 3.
2.5]
>>> print numpy . ptp ( a )
7
>>> print numpy . ptp (a , axis =1)
[5 6]
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

99 / 137

Uso de NUMPY

Estadstica basica
Ejemplo 2
>>> b = numpy . array ([[5 , numpy . nan , 1] , [2 , 3 , numpy . nan ]])
>>> print numpy . amin ( b )
nan
>>> print numpy . amax ( b )
nan
>>> print numpy . nanmin ( b )
1.0
>>> print numpy . nanmin (b , axis =0)
[ 2. 3. 1.]
>>> print numpy . nanmin (b , axis =1)
[ 1. 2.]
>>> print numpy . nanmax (b , axis =1)
[ 5. 3.]
>>> print numpy . ptp ( b )
nan
>>> print numpy . ptp (b , axis =0)
[ 3. nan nan ]
>>> print numpy . ptp (b , axis =1)
[ nan nan ]
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

100 / 137

Uso de NUMPY

Estadstica basica

Como obviar el problema


de los NaN?
Posibles soluciones:
Seleccionar el sub-array de elementos que no son
NaN.
Usar arrays con mascara (masked arrays) (mas
adelante).
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

101 / 137

Uso de NUMPY

Estadstica basica
Valores promedio y varianzas
Funci
on
numpy.average(a, axis=None,
weights=None)

numpy.mean(a, axis=None,
dtype=None)

numpy.median(a, axis=None)
numpy.std(a, axis=None,
dtype=None, ..., ddof=0)

numpy.var(a, axis=None,
dtype=None, ..., ddof=0)
C
esar Husillos Rodrguez (IAA-CSIC)

Descripci
on
Devuelve un escalar o array con la media pesada del
array a por los valores weights en el eje axis
seleccionado. Los pesos pueden ser arrays 1-D, en cuyo
caso ha de tener la misma longitud que a en el eje
seleccionado. Si weights=None se asume el mismo peso
(valor=1) para todos los elementos.
Devuelve un escalar o array con la media aritm
etica
del array sobre el axis dado. dtype establece el tipo
de datos de entrada sobre el que promediar. El valor
asignado por defecto es el del tipo del array.
Devuelve un escalar o array con la mediana del array para
el eje seleccionado.
Devuelve un escalar o array con la desviaci
on est
andar en
el eje seleccionado. ddof es el acr
onimo de Delta Degrees
of Freedom. El denominador usado en los c
alculos
es N ddof , donde N es el n
umero de elementos.
Devuelve un escalar o array con la varianza de los
elementos del array en el eje seleccionado. Misma leyenda
que std para el resto de par
ametros.
M
odulo 1 Numpy

Septiembre de 2014

102 / 137

Uso de NUMPY

Estadstica basica
Ejemplo 3
>>> a = numpy . arange (4). reshape ((2 , 2))
>>> a
array ([[0 , 1] ,
[2 , 3]])
>>> print numpy . average (a , axis =1 , weights =(0 , 1))
[ 1. 3.]
>>> print numpy . mean (a , axis =0)
[ 1. 2.]
>>> print numpy . mean (a , axis =1)
[ 0.5 2.5]
>>> print numpy . median ( a )
1.5
>>> print numpy . median (a , axis =1)
[ 0.5 2.5]
>>> print numpy . std ( a )
1.11803398875
>>> print numpy . var ( a )
1.25
>>> print numpy . std ( a ) * numpy . std ( a )
1.25
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

103 / 137

Uso de NUMPY

Estadstica basica
Histogramas
Funci
on
numpy.histogram(a, bins=10,
range=None, normed=False,
weights=None, density=None)

numpy.histogram2d(x, y,
bins=10, range=None,
normed=False, weights=None)

C
esar Husillos Rodrguez (IAA-CSIC)

Descripci
on
Devuelve una tupla con dos arrays: (histograma, bins)
de la versi
on 1D del array. bins, puede ser un n
umero,
lista o array ( con intervalos no uniformes).
Si normed=True, retorna el histograma normalizado.
Pueden pesarse los elementos del array.
Si weights=None todos los elementos cuentan como 1.
Si no, debe ser un array de la misma forma que a.
normed afecta tambi
en a weights.
density es un booleano. Si es False el histograma
devuelve el n
umero de elementos por cada bin. Si no
devuelve el valor de la funci
on densidad de probabilidad
de cada bin, normalizada a todo el rango de bins.
Devuelve la tupla de arrays: (histo, bins x, bins y)
x e y son arrays. bins puede tomar:
- un valor entero (n
um. divisiones en cada dimensi
on),
- [entero, entero] (num. divisiones en cada eje),
- un array (v
alido para los dos ejes) o
- [array, array], uno para cada dimensi
on.
M
odulo 1 Numpy

Septiembre de 2014

104 / 137

Uso de NUMPY

Estadstica basica
Histogramas

Funci
on
numpy.digitize(a, bins,
right=False)

numpy.bincount(x,
weights=None, minlength=None)

C
esar Husillos Rodrguez (IAA-CSIC)

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 2014

105 / 137

Uso de NUMPY

Estadstica basica
Histogramas: Ejemplo 1

Ejemplos de uso de histogramas


>>> a = numpy . array ([0 , 1 , 2 , 3 , 2 , 4 , 3 , 3 , 3 , 5 , 6 , 9])
>>> bins = numpy . arange (10)
>>> numpy . histogram (a , bins )
( array ([1 , 1 , 2 , 4 , 1 , 1 , 1 , 0 , 1]) ,
array ([0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9]))
>>> numpy . digitize (a , bins )
array ([ 1 , 2 , 3 , 4 , 3 , 5 , 4 , 4 , 4 , 6 , 7 , 10])

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

106 / 137

Uso de NUMPY

Ejercicios

Del 22 al 26
http://www.iaa.es/python/cientifico/ejercicios/numpy

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

107 / 137

Uso de NUMPY

Correlaciones y covarianzas
Covarianza
En probabilidad y estadstica, 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 coeficiente de correlaci
on lineal o la recta de regresi
on.

Correlaci
on
En probabilidad y estadstica, la correlaci
on indica la fuerza y la direcci
on de una relaci
on
lineal y proporcionalidad entre dos variables estadsticas. Se considera que dos variables
cuantitativas est
an correlacionadas cuando los valores de una de ellas varan 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.
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

108 / 137

Uso de NUMPY

Correlaciones y covarianzas
Funci
on
numpy.cov(m, y=None,
rowvar=1, bias=0,
ddof=None)

numpy.correlate(a, v,
mode=valid)

numpy.corrcoef(x,
y=None, rowvar=1,
bias=0, ddof=None)

C
esar Husillos Rodrguez (IAA-CSIC)

Descripci
on
Estima la matriz de covarianza. m es un array 1D o 2D.
Cada columna de m representa una observaci
on. Cada fila, una
variable. y es un conjunto adicional de observaciones (misma
forma que m). Si rowvar es distinta de cero, cada fila
representa una variable. Cada columna una observaci
on.
bias es un entero. Si es cero, se trasponen filas 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
P
z[k] = n a[n] conj(v [n + k])
mode vale full, valid o same, que establece los lmites
del desplazamiento (n) entre arrays (ver documentaci
on).
C
Devuelve los coeficientes de correlaci
on Pij = ij .
Cii Cjj

x es un array 1D o 2D. Cada fila es una variable.


Cada columna una observaci
on. Para el resto, misma leyenda
que numpy.cov.
M
odulo 1 Numpy

Septiembre de 2014

109 / 137

Uso de NUMPY

Estadstica basica
Correlaciones y covarianzas: Ejemplo 1
>>> x = [ -2.1 , -1 , 4.3]
>>> y = [3 , 1.1 , 0.12]
>>> X = numpy . vstack (( x , y ))
>>> print X
[[ -2.1 -1.
4.3 ]
[ 3.
1.1
0.12]]
>>> print numpy . cov ( X )
[[ 11.71
-4.286
]
[ -4.286
2.14413333]]
>>> print numpy . cov (x , y )
[[ 11.71
-4.286
]
[ -4.286
2.14413333]]
>>> print numpy . cov (y , x )
[[ 2.14413333
-4.286
]
[ -4.286
11.71
]]
>>> print numpy . cov ( x )
11.71
>>> print numpy . var (x , ddof =1)
11.71
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

110 / 137

Uso de NUMPY

Estadstica basica
Correlaciones y covarianzas: Ejemplo 2

>>> x = [ -2.1 , -1 , 4.3]


>>> y = [3 , 1.1 , 0.12]
>>> X = numpy . vstack (( x , y )) # agrega filas
>>> print X
[[ -2.1 -1.
4.3 ]
[ 3.
1.1
0.12]]
>>> print numpy . cov ( X )
[[ 11.71
-4.286
]
[ -4.286
2.14413333]]
>>> print numpy . correlate (x , y )
[ -6.884]
>>> print numpy . corrcoef (x , y )
[[ 1.
-0.85535781]
[ -0.85535781 1.
]]

Una variable correlaciona perfectamente consigo misma (valor 1 en


la diagonal principal). La correlacion vara en [1, 1].
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

111 / 137

Uso de NUMPY

Muestreo aleatorio
Hemos de importar de forma explcita este modulo.
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)

shuffle(x)
permutation(x)

C
esar Husillos Rodrguez (IAA-CSIC)

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 o secuencia (ND-array).
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 2014

112 / 137

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]

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

113 / 137

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]]

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

114 / 137

Uso de NUMPY

Ejercicios

Del 27 al 30
http://www.iaa.es/python/cientifico/ejercicios/numpy

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

115 / 137

Uso de NUMPY

Polinomios
Se gestionan a traves de la clase Polynomial del paquete
numpy.polynomial.polynomial que debe ser importado.
Creacion
numpy.polynomial.polynomial.Polynomial(coef)
que devuelve un objeto de tipo Polynomial.
coef es una tupla que establece los coeficientes 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.])

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

116 / 137

Uso de NUMPY

Polinomios
Creaci
on alternativa

Se puede generar un polinomio si se conocen sus races. A partir de


una funcion situada en el modulo numpy.polynomial.polynomial.
Funci
on
polyfromroots(roots)

Descripci
on
Genera un polinomio a partir de sus races, 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.])

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

117 / 137

Uso de NUMPY

Polinomios
Utilidad

Que se puede hacer con polinomios?

Buscar sus races.

Derivarlos e integrarlos.

Operar entre ellos.

Realizar ajustes a datos obtenidos en una muestra.

Evaluacion de su valor en un punto.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

118 / 137

Uso de NUMPY

Polinomios
Metodos

M
etodo
copy()
degree()
cutdeg(deg)
roots()
deriv(m=1)
integ(m=1, k=[],
lbnd=None)

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 races 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 lmite inferior de la integral (si es definida).

NOTA: Un m
etodo es una funci
on que se llama desde un objeto de una clase. La sintaxis
sera: objeto.metodo([parametros]).
Es decir, si creo un objeto polinomio llamado pol, para obtener el grado del polinomio
ejecutar
e
pol.degree()

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

119 / 137

Uso de NUMPY

Operaciones entre polinomios


Siendo c1 y c2 las secuencias que definen los coeficientes de los
polinomios, se pueden realizar las siguientes operaciones:
Funci
on
polyadd(c1,
polysub(c1,
polymul(c1,
polymulx(c)
polydiv(c1,

c2)
c2)
c2)
c2)

polypow(c, pow)

Descripci
on
Devuelve la suma dos polinomios.
Devuelve el polinomio resta de c1 y c2.
Devuelve el producto de dos polinomios.
Devuelve el producto de un polinomio por x.
Devuelve una tupla con dos arrays: el que define el cociente
y el que define el resto del resultado de dividir el polinomio c1 entre c2.
Devuelve el resultado de multiplicar el polinomio c al entero pow.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

120 / 137

Uso de NUMPY

Operaciones entre polinomios


Ejemplo 1

>>> 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.]))

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

121 / 137

Uso de NUMPY

Polinomios
Ajuste

Se puede generar un polinomio mediante un ajuste por mnimos


cuadrados a una nube de puntos en 2D. Se usa el modulo
numpy.polynomial.polynomial.
Funci
on
polyfit(x, y, deg, )
..., full=False, w=None)

C
esar Husillos Rodrguez (IAA-CSIC)

Descripci
on
Retorna un polinomio de grado deg.
x e y tienen que tener la misma dimensi
on final.
Si y es 2D, se realizan m
ultiples ajustes (uno por cada
columna de y ). El resultado es tambi
en 2D (cada columna
se refiere a un ajuste). deg es el grado del polinomio
a ajustar. full se refiere al formato de salida:
False, s
olo coeficientes, True, coeficientes e informaci
on
de diagn
ostico ([residuals, rank, singular values,
rcond]). w, se refiere al peso de cada par de
coordenadas (xi , yi ). Si no se da, los pesos valen 1.

M
odulo 1 Numpy

Septiembre de 2014

122 / 137

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])

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

123 / 137

Uso de NUMPY

Creacion de array por ajuste


Ejemplo 1

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

124 / 137

Uso de NUMPY

Polinomios
Evaluaci
on de valor en un punto

Dado un polinomio en la forma


p(x) = c0 + c1 x + c2 x 2 + + cn x n
podemos evaluar un polinomio para cualquier valor de la variable
independiente.
Funci
on
polyval(x, c)

Descripci
on
Eval
ua el polinomio dado por la secuencia c en los puntos dados por x
(escalar o secuencia).
c puede ser 1D o nD. En este u
ltimo caso hay que considerar m
as
par
ametros de la funci
on polyval (ver documentaci
on).

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

125 / 137

Uso de NUMPY

Evaluacion
Ejemplo 1

Como ejemplo, evaluaremos el polinomio


p(x) = 2 + x 2

>>> import numpy . polynomial . polynomial as npp


>>> # A t e n c i o n al orden de los c o e f i c i e n t e s del p o l i n o m i o
>>> npp . polyval (0 , [2 , 0 , 1])
1.0
>>> npp . polyval ([ -1 , 0 , 1 , 2] , [1 , 0 , 1])
array ([ 2. , 1. , 2. , 5.])

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

126 / 137

Uso de NUMPY

Polinomios especiales
NUMPY proporciona soporte a traves del modulo
numpy.polynomial.polynomial para la generacion y
operacion con polinomios especiales:
1
Chebyshev
2
Legendre
3
Laguerre
4
Hermite
Para mas informacion, consulte la documentacion.
REFERENCIA: http://docs.scipy.org/doc/numpy/reference/routines.polynomials.package.html

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

127 / 137

Uso de NUMPY

Ejercicios

Del 31 al 36
http://www.iaa.es/python/cientifico/ejercicios/numpy

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

128 / 137

Uso de NUMPY

Arrays con mascaras


Son accesibles a traves del paquete numpy.ma
1

Un array con mascara permite trabajar con arrays que


contienen elementos no validos (nan, inf ) o que no tienen un
valor asignado (missing values) porque el conjunto de datos es
incompleto.

Se crean combinando un array de los ya conocidos y una


mascara (que no es mas que un array de booleanos).

Cuando un elemento del array tiene asociado un valor de


mascara igual a False, quiere decir que ese valor es valido (no
esta enmascarado).

El paquete numpy.ma se asegura de usar solo los valores


validos a la hora de realizar operaciones.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

129 / 137

Uso de NUMPY

Arrays con mascaras


Creaci
on y manejo

Existen varias formas. La mas sencilla es a traves de la funcion


array del modulo.
numpy.ma.array(data, dtype=None,
mask=False, fill value=None)

Donde data es la secuencia de datos,


dtype el tipo de dato,
mask es una secuencia de booleanos que
representa la m
ascara,
fill value es el valor con el que se rellena la
m
ascara en caso de ser necesario.

>>> import numpy . ma


>>> am = numpy . ma . array ([1 , 2 , 3])
>>> am
masked_array ( data = [1 2 3] ,
mask = False ,
fill_value = 999999)

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

130 / 137

Uso de NUMPY

Arrays con mascaras


Creaci
on y manejo

Para acceder a los datos, se usa el atributo data. Tambien


es posible usar el metodo array o la funcion getdata.
Para acceder a la mascara se usa el atributo mask. Las otras
posibilidades pasan por usar las funciones getmask y
getmaskarray del modulo.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

131 / 137

Uso de NUMPY

Creacion 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 ]

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

132 / 137

Uso de NUMPY

Arrays con mascaras


Creaci
on y manejo

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)

Para modificar mascara ...


>>> am [1] = numpy . ma . masked # para un e l e m e n t o
>>> print am
[ - - -- 3]
>>> am . mask = [0 ,1 ,0] # para cambiar varios
>>> print am
[1 -- 3]
>>> am [1] = -2 # a s i g n a n d o un valor valido se d e s e n m a s c a r a
>>> print am
[1 -2 3]
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

133 / 137

Uso de NUMPY

Arrays con mascaras


Operaciones
>>> x = numpy . ma . array ([1 , 2 , 3] , mask =[0 , 0 , 1])
>>> x [0] , x [ -1]
(1 , masked )
>>> x [ -1] is numpy . ma . masked
True

Para operar con arrays con mascara 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)

El modulo numpy.ma gestiona de forma automatica las mascaras.


C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

134 / 137

Uso de NUMPY

Arrays con mascaras


Funciones numpy.ma

numpy.ma implementa muchas de las funciones vistas para los


arrays.
>>>
>>>
3
>>>
4
>>>
2.0
>>>
1.0

y = numpy . ma . array ([3 , -1 , 2 , 5] , mask =[0 , 0 , 1 , 1])


print numpy . ma . max ( y )

print numpy . ma . ptp ( y )


print numpy . ma . std ( y )
print numpy . ma . median ( y )

Ahora, piense en arrays con mascara en N-dimensionales.

Ve las posibilidades de uso en su


trabajo diario?
C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

135 / 137

Uso de NUMPY

Ejercicios

Del 37 al 38
http://www.iaa.es/python/cientifico/ejercicios/numpy

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

136 / 137

Uso de NUMPY

Y por fin...
.

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.

C
esar Husillos Rodrguez (IAA-CSIC)

M
odulo 1 Numpy

Septiembre de 2014

137 / 137

También podría gustarte