Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Fundamentos de Programación
Unidad 5 – Arreglos N-Dimensioanles (NUMPY)
Agenda
5.1 Propiedades
5.2 Indexación básica.
5.3 Indexación con arreglos.
5.4 Indexación boleana.
5.5 Slicing
5.6 Operaciones aritméticas, estadísticas y de ordenamiento.
5.7 Broadcasting (no entra dentro del primer parcial)
Objetivos
• Identificar las propiedades de los arreglos Ndimensionales como
herramienta de agrupación de datos.
• Aplicar técnicas de indexación y slicing para la manipulación de datos
representados como arreglos Ndimensionales.
• Utilizar las operaciones aritméticas, estadísticas y la técnica de
broadcasting para la resolución de problemas.
Numpy
Numpy
• Numpy es una librería de Python que contiene objetos y funciones
especializadas para computación científica.
Alias de la librería
Arreglos
Arreglos Numpy
• En Numpy un arreglo es:
• Una colección de elementos que son todos del mismo tipo,
• Que tienen una o más dimensiones
• Que son indexados por una tupla de enteros no negativos.
Creación Arreglos
• Una de las funciones para crear arraglos es array
np.array(lista, tipo)
tipo: el tipo de dato de
los elementos que va a
Alias de la librería lista: cualquier lista
contener el arreglo.
que se quiera
Si no pasamos el tipo de
convertir a arreglo.
dato numpy inferirá el
tipo
CON LISTAS
CON ARREGLOS
Dimensiones de un arreglo
Dimensiones de un arreglo
• Los arreglos pueden tener múltiples dimensiones
Eje 0
>>> np.array([0,1,2])
array([0,1,2])
Arreglo 2 Dimensiones
Dimensión Ejemplo Terminología
Eje 0
Eje 1
Eje 2
Eje 0
Eje 1
Arreglo N-Dimensiones
• ndim
• shape
• dtype
• size
Propiedades de los arreglos
Propiedad Acción
shape Devuelve una tupla con el número de elementos por eje (o axis).
dtype Devuelve el número total de elementos en el arreglo.
size Devuelve le número de elementos en el arreglo.
Ejemplo Propiedades
a = np.array([0,1,2])
a.ndim 1
0 1 2
a.shape (3,)
Eje 0
a.size 3
a.dtype int64
Ejemplo Propiedades
a = np.array([[1.2, 2.1, 3.3],
[4.1, 5.3, 6.1]])
a.ndim 2
1.2 2.1 3.3
Eje 0 a.shape (2,3)
4.1 5.3 6.1
a.size 6
Eje 1
a.dtype float64
ndim, shape, size y dtype son propiedades de un arreglo de
python, por lo tanto para llamarlas, no se usa paréntesis al final
Otras funciones para creación de Arreglos
• zeros: Crea un arreglo lleno de ceros.
0. 0. 0. 0.
np.zeros((2,4))
0. 0. 0. 0.
np.zeros((3,),int) 0 0 0
Note que el tipo de dato por defecto es float. Si queremos cambiar el tipo de
dato debemos pasarlo este como segundo parámetro a al función
Otras funciones para creación de Arreglos
• ones: Crea un arreglo lleno de unos.
1. 1. 1. 1.
np.ones((2,4))
1. 1. 1. 1.
np.ones((3,),int) 1 1 1
Note que el tipo de dato por defecto es float. Si queremos cambiar el tipo de
dato debemos pasarlo este como segundo parámetro a al función
Otras funciones para creación de Arreglos
• full: Crea un arreglo lleno con el valor pasado como parámetro.
8. 8. 8. 8.
np.full((4),8)
Otras funciones para creación de Arreglos
• arange: Análoga a la función range() , pero devuelve un arreglo de
numpy de una dimensión con una secuencia numérica.
np.arange(5) [0.,1.,2.,3.,4.]
np.arange(1,5,dtype=float) [1.,2.,3.,4.]
np.arange(1,6,2) [1.,3.,5.]
np.arange(1,6,2,dtype=int) [1,3,5]
Creación de arreglos con valores aleatorios
• random.rand: Devuelve un arreglo lleno de números aletorios del 0 al
1 sin incluir.
np.random.rand(d0,d1,..,dn)
>>> np.random.rand(2)
array([ 0.36224194, 0.04741409])
>>>
>>> np.random.rand(2,3)
array([[ 0.22528469, 0.64457002, 0.95773452],
[ 0.04280942, 0.5524413 , 0.81875768]])
Creación de arreglos con valores aleatorios
• random.randint: Devuelve un arreglo con números aletorios enteros
dentro de un rango especificado [desde,hasta).
np.random.randint(desde, hasta, size = (fil,cols))
• copy
• tolist
• cast
copy
• Devuelve un nuevo arreglo que es la copia del original.
>>> a = np.array([1,2,3])
>>> a
array([1, 2, 3])
>>> a = a.astype(np.float)
>>> a
array([ 1., 2., 3.])
⋙ l = [1,2,3,4,5,6,7,8] Creamos el arreglo ‘a’, a
partir de la lista ‘l’
⋙ a = np.array(l, float)
⋙a
array([ 1., 2., 3., 4., 5., 6., 7., 8.,]) Usamos reshape para crear
un nuevo arreglo con con los
⋙ c = a.reshape(2,4) elementos de a, que tiene 2
⋙c elementos eje 0 (filas) y 4
elemento eje 1 (columna)
array([ [ 1., 2., 3.,4.],
[5., 6., 7., 8.])
⋙ tam = c.size 8
⋙ filas = c.shape[0] 2
⋙ cols = c.shape[1]
4
⋙ rank = c.ndim
2
⋙ tipo = c.type()
dtype('float64')
Ejercicios
• Ejecute cada uno de los comandos y observe la salida
⋙ m = 2
⋙ n = 3
⋙ solo_unos = np.ones((m,))
⋙ solo_zeros = np.zeros((n,), dtype=int)
⋙ pasos = np.arange(5, float)
⋙ nuevo = np.arange(0,10,2)
⋙ nuevo_2 = np.arange(0,10,.2)
⋙ nuevo_2.size
5.2 Indexación Básica
Índices en los arreglos
• Los elementos en los arreglos pueden ser consultados y modificados
usando sus índices.
0 1 2 3
1 2 3 4
Eje 0
⋙ notas
>>> a + 2
array([2, 3, 4, 5, 6, 7])
>>> a * 3
array([ 0, 3, 6, 9, 12, 15])
>>> a ** 2
array([ 0, 1, 4, 9, 16, 25])
Operaciones Aritméticas entre arreglos
• Las operaciones aritméticas entre arreglos también se efectúan
elemento a elemento.
>>> notas_1 = np.array([ 0.13, 8.40, 8.49, 3.58])
>>> notas_2 = np.array([ 0.33, 7.72, 4.20, 8.61])
>>> suma_notas = notas_1 + notas_2
>>> suma_notas
array([ 0.46, 16.12, 12.69, 12.19])
>>> suma_resta = notas_1 - notas_2
>>> suma_resta
array([[ -0.2, 0.68, 4.29, -5.03]])
Funciones matemáticas y estadísticas
Operaciones básicas – Aritméticas.
a = np.array([2, 4, 3], float)
• a.min() -> retorna el mínimo valor entre los elementos del arreglo.
• a.max() -> retorna el máximo entre los elementos del arreglo.
• a.argmax() -> retorna el índice del máximo valor entre los elementos del
arreglo
• a.argmin() -> retorna el índice del mínimo valor entre los elementos del
arreglo.
>>> a = np.array([2, 1, 9], float)
>>> a.argmin()
1
>>> a.argmax()
2
Operaciones básicas – Ordenamiento.
a = np.array([2, 1, 9], float)
• a.argsort() -> retorna un arreglo con los índices de los elementos ordenados.
• a.sort() -> ordena los elementos del arreglo en orden ascendente.
>>> a = np.array([2, 1, 9], float)
>>> a.argsort()
array([1, 0, 2]
>>> a.sort()
>>> a
array([ 1., 2., 9.])
5.2 Indexación Básica
Índices en los arreglos
• Los elementos en los arreglos pueden ser consultados y modificados
usando sus índices.
0 1 2 3
1 2 3 4
Eje 0
⋙ notas
>>> a > b
array([ True, False, False], dtype=bool) La comparación es
>>> cond = a == b entre los elementos en
>>> cond la misma posición
array([False, True, False], dtype=bool)
Problema: Queremos seleccionar o modificar solo los elementos del
arreglo que cumplen con alguna condición.
Indexamiento booleana - Seleccionar
elementos
• Seleccionar los elementos del arreglo que son mayores que 0
Usamos el arreglo booleano como índice para extraer los elementos que
cumplen con la condición
Indexamiento booleana – Reemplazar
elementos
• Cambiar en el arreglo los valores igualaes a 59 por 60.
Propiedad Acción
np.all(condición) Retorna True si todos los elementos del arreglo cumplen con
la condición.
codigos = np.array(['001','002','003','004','005','006'])
precios = np.array([75000,80000,90000,85000,120000,110000])
metros = np.array([98,100,110,90,120,160]) #metros cuadrados
sectores = np.array(['norte','sur','centro','norte','centro','norte'])
habitaciones = np.array([2,3,2,2,3,4])
Ejercicio – continuación
• Se pide que encuentre lo siguiente:
• ¿Cuál es el precio promedio de las casas en el sector norte?
• ¿Cuáles son los códigos de las casas de tres o cuatro habitaciones que cuestan
menos de 85000 dólares ?
• Se conctruye un centro comercial en el “centro” y las plusvalia de las casas
aumentan en un 10%. Modifique el precio de las casas para reflejar esto
Ejercicio – continuación
• ¿ Cuál es el precio promedio de las casas en el sector norte?
condsec = sectores=='norte'
preciosn = precios[condsec]
precio_prom_norte = preciosn.mean()
print('Precio promedio de las casas sector norte',precio_prom_norte)
Ejercicio – continuación
• ¿Cuáles son los códigos de las casas de tres o cuatro habitaciones
que cuestan menos de 85000 dólares ?
El operador or en numpy es |
El operador and en numpy es &
Es importante usar los parentesis para limitar las condiciones
Ejercicio – continuación
• Se conctruye un centro comercial en el “centro” y las plusvalia de las casas
aumentan en un 10%. Modifique el precio de las casas para reflejar esto.
Eje 0
Eje 1
a.ndim 2
1.2 2.1 3.3
Eje 0 a.shape (2,3)
4.1 5.3 6.1
a.size 6
Eje 1
a.dtype float64
Otras funciones para creación de Arreglos
• zeros: Crea un arreglo lleno de ceros.
0. 0. 0. 0.
np.zeros((2,4))
0. 0. 0. 0.
np.zeros((3,),int) 0 0 0
Note que el tipo de dato por defecto es float. Si queremos cambiar el tipo de
dato debemos pasarlo este como segundo parámetro a al función
Otras funciones para creación de Arreglos
• ones: Crea un arreglo lleno de unos.
1. 1. 1. 1.
np.ones((2,4))
1. 1. 1. 1.
np.ones((3,),int) 1 1 1
Note que el tipo de dato por defecto es float. Si queremos cambiar el tipo de
dato debemos pasarlo este como segundo parámetro a al función
Otras funciones para creación de Arreglos
• full: Crea un arreglo lleno con el valor pasado como parámetro.
8. 8. 8. 8.
np.full((4),8)
Otras funciones para creación de Arreglos
• arange: Análoga a la función range() , pero devuelve un arreglo de
numpy de una dimensión con una secuencia numérica.
np.arange(5) [0.,1.,2.,3.,4.]
np.arange(1,5,dtype=float) [1.,2.,3.,4.]
np.arange(1,6,2) [1.,3.,5.]
np.arange(1,6,2,dtype=int) [1,3,5]
Creación de arreglos con valores aleatorios
• random.rand: Devuelve un arreglo lleno de números aletorios del 0 al
1 sin incluir.
np.random.rand(d0,d1,..,dn)
>>> np.random.rand(2)
array([ 0.36224194, 0.04741409])
>>>
>>> np.random.rand(2,3)
array([[ 0.22528469, 0.64457002, 0.95773452],
[ 0.04280942, 0.5524413 , 0.81875768]])
Creación de arreglos con valores aleatorios
• random.randint: Devuelve un arreglo con números aletorios enteros
dentro de un rango especificado [desde,hasta).
np.random.randint(desde, hasta, size = (fil,cols))
Eje 0
Eje 1
⋙ np_2d[0,2]
1.71
⋙ np_2d[1,4]
68.7
⋙ np_2d[1,0]
65.4
5.5 Slicing
Slincing
0 1 2 3 4
⋙ np_2d[1,:]
array([65.4,59.2, 63.6, 88.4, 68.7])
Slincing
0 1 2 3 4
⋙ np_2d[ :0,3]
Array([ 1.89, 88.4])
Slincing
0 1 2 3 4
⋙ np_2d[:,1:4]
array([[ 1.68, 1.71, 1.89],
[ 59.2 , 63.6 , 88.4 ]])
Cambiar Valores en arreglos de dos
dimensiones
⋙ np_2d
⋙ np_2d
np_2d
array([[ 1.73, 10. , 10. , 1.89, 1.79],
[ 0. , 10. , 10. , 88.4 , 68.7 ]])
for para iterar sobre elementos de un arreglo
1 98 96 56 20
2 11 53 85 93
3 78 46 34 73
4 70 60 43 100
Solución
5.4 Indexación boleana
Arreglos boleanos
• Operaciones con operadores boleanos (==,>,<,etc) entre arreglos de
numpy producen arreglos con valores boleanos.
>>> h = np.array([[1,3,5],[2,6,7],[3,6,5]])
>>> h
array([[1, 3, 5],
[2, 6, 7],
[3, 6, 5]])
>>> h > 3
array([[False, False, True],
[False, True, True],
[False, True, True]], dtype=bool)
Arreglos boleanos
Usamos el arreglo booleano como índice para extraer los elementos que
cumplen con la condición
Seleccionar elementos
• Seleccionar los elemetos del arreglos que son mayores o iguales que 6
>>> a = np.array([[6, 4], [5, 9]], float)
>>> a >= 6
array([[ True, False], [False, True]], dtype=bool)
>>> a[a >= 6]
array([ 6., 9.])
>>> z
array([[ 1, 2, -1],
[-3, 4, 5],
[-2, -1, 7]])
>>> z[z<0] = 1
>>> z
array([[1, 2, 1],
[1, 4, 5],
[1, 1, 7]])
Ejercicio
• Cree un arreglo de dos dimensiones de tamaño 5x5 con valores
aleatorios entre cero y seis [0,6) y muestre el resultado.
• Reemplace los elementos del arreglo menores o iguales a 3 por 0 y los
mayores a 3 con 6.
Ejercicio
• Usted tiene un arreglo de dos dimensiones llamado notas, con las
notas de los alumnos de distintos cursos en distintas materias.
materia1 materia2 materia3 materia4
alumno1 13 14 12 20
alumno2 12 18 18 13
alumno3 11 12 19 20
Propiedad Acción
np.all(condición) Retorna True si todos los elementos del arreglo cumplen con
la condición.
• ¿Cuáles son los vendedores que han vendido más de 1000 dólares
en el año?
Solución
import numpy as np
vendedores = np.array(["jose","maria","pedro","juan","alvaro"])
ventas = np.array([[123,334,837,314,536],
[245,234,456,897,234],
[234,898,678,577,123],
[124,321,154,176,248]])
#usamos esos indices para extraer la informacion de los nombres del arreglo de vendedores
print(vendedores[indices_vendedores])
5.7 Broadcasting
Broadcasting
• El término Broadcasting describe cómo numpy trata arreglos con
diferentes formas durante operaciones aritméticas.
>>> a = np.array([1,2,3])
a(3) b(1) c(3)
>>> b = np.array([2])
>>> c = a * b 1 2 3 2 2 2 2 4 6
>>> c
stretch
array([2, 4, 6])
Broadcasting
5 11 12 90 70
1 1,0 1,1 1,2 1,3 1,4
Eje 0
13 34 15 80 5
2 2,0 2,1 2,2 2,3 2,4
13 34 15 80 5
Eje 1
//80
0 1 2 3 4
5 11 12 90 70
1 1,0 1,1 1,2 1,3 1,4
Eje 0
13 34 15 80 5
2 2,0 2,1 2,2 2,3 2,4
13 34 15 80 5
Eje 1
0 1 2 3 4
5 11 12 90 70
1 1,0 1,1 1,2 1,3 1,4
Eje 0
13 34 15 80 5
2 2,0 2,1 2,2 2,3 2,4
13 34 15 80 5
Eje 1
En el eje0 estan de 0 al 1 seccion = a[ 0:2 , 1:4 ]
En el eje1 estan de 1 al 3
0 1 2 3 4
5 11 12 90 70
1 1,0 1,1 1,2 1,3 1,4
Eje 0
13 34 15 80 5
2 2,0 2,1 2,2 2,3 2,4
13 34 15 80 5
Eje 1
0 1 2 3 4
5 11 12 90 70
1 1,0 1,1 1,2 1,3 1,4
Eje 0
13 34 15 80 5
2 2,0 2,1 2,2 2,3 2,4
13 34 15 80 5
Eje 1
0 1 2 3 4
5 11 12 90 70
1 1,0 1,1 1,2 1,3 1,4
Eje 0
13 34 15 80 5
2 2,0 2,1 2,2 2,3 2,4
13 34 15 80 5
Eje 1
0 1 2 3 4
5 11 12 90 70
1 1,0 1,1 1,2 1,3 1,4
Eje 0
13 34 15 80 5
2 2,0 2,1 2,2 2,3 2,4
13 34 15 80 5
Eje 1
Eje 1
5 11 12 90 70
1,0 1,1 1,2 1,3 1,4 147
13 34 15 80 5
2,0 2,1 2,2 2,3 2,4 147
13 34 15 80 5
0,0 0,1 0.2 0.3 0.4
5 11 12 90 70
1,0 1,1 1,2 1,3 1,4
Eje 0
13 34 15 80 5
2,0 2,1 2,2 2,3 2,4
13 34 15 80 5
13 34 15 80 5 90
Eje 1
EJERCICIO VENTAS
1 2 3 4 5 6 7 8 9 10 11 12 meses
0 1 2 3 4 5 6 7 8 9 10 11 indices
EJERCICIO VENTAS