Documente Academic
Documente Profesional
Documente Cultură
N-Dimensionales
(NUMPY)
CPG1001- Fundamentos de Programación
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
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 arreglos es array
np.array(lista, tipo)
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,7,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.rand(desde, hasta, size = (fil,cols))
a = a -> [0,1,2,3,4,5]
np.arange(6,dtype=int) b -> [[0,1,2],
b = a.reshape((2,3)) [3,4,5]]
reshape
• 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.])
Ejercicios
⋙ lista = [1,2,3,4,5,6,7,8,9]
⋙ a = np.array(lista, float)
⋙ b = np.array(lista, int)
⋙ c = a.reshape(3,3)
⋙ tam = c.size
⋙ filas = c.shape[0]
⋙ cols = c.shape[1]
⋙ rank = c.ndim
⋙ tipo = c.type
Ejercicios
⋙m = 2
⋙n = 3
⋙ solo_unos = np.ones((m,n))
⋙ matriz_nula = np.zeros((m,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
5.3 Indexación con Arreglos
Índices en los arreglos
• Los elementos en los arreglos pueden ser consultados y modificados
usando sus índices.
0 1 2
0 1 2 3
1.2 2.1 3.3 0
1 2 3 4
Eje 0
4.1 5.3 6.1 1
Eje 0
Eje 1
⋙ notas = np.array([ 4.13 , 3.76, 3.68, 1.62 , 8.77, 8.70, 8.89, 6.75])
⋙ notas[1]
⋙ 3.76
⋙ notas[5]
⋙ 8.77
Acceder elementos en los arreglos – 2
Dimensiones
• Arreglos 2 dimensiones
⋙ np_2d = np.array([[1.73, 1.68, 1.71, 1.89, 1.79], [65.4, 59.2, 63.6, 88.4,
68.7]])
⋙ np_2d
array([[ 1.73, 1.68, 1.71, 1.89, 1.79],
[ 65.4 , 59.2 , 63.6 , 88.4 , 68.7 ]])
Acceder elementos en los arreglos – 2
Dimensiones
0 1 2 3 4
⋙ 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[:,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 los arreglos
⋙ notas
array([ 4.13, 3.76, 3.68, 1.62, 8.77, 8.7 , 8.89, 6.75])
⋙ notas[0] = 10
⋙ notas
array([ 10. , 3.76, 3.68, 1.62, 8.77, 8.7 , 8.89, 6.75])
⋙ notas[:3]=10
⋙ notas
array([ 10. , 10. , 10. , 1.62, 8.77, 8.7 , 8.89, 6.75])
Cambiar Valores en los arreglos
⋙ np_2d
array([[ 1.73, 1.68, 1.71, 1.89, 1.79],
[ 65.4 , 59.2 , 63.6 , 88.4 , 68.7 ]])
⋙ np_2d[1,0] = 0
⋙ np_2d
array([[ 1.73, 1.68, 1.71, 1.89, 1.79],
[ 0. , 59.2 , 63.6 , 88.4 , 68.7 ]])
Cambiar Valores en los arreglos
⋙ np_2d
array([[ 1.73, 1.68, 1.71, 1.89, 1.79],
[ 65.4 , 59.2 , 63.6 , 88.4 , 68.7 ]])
⋙ np_2d[:,1:3] = 10
np_2d
array([[ 1.73, 10. , 10. , 1.89, 1.79],
[ 0. , 10. , 10. , 88.4 , 68.7 ]])
Iterar sobre elementos de un arreglo
for para iterar sobre elementos de un arreglo
• Los arreglos se pueden recorrer al igual que las listas.
>>> 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.
Otras funciones boleanas
Propiedad Acción
np.all(condición) Retorna True si todos los elementos del arreglo cumplen con
la condición.
>>> a = np.arange(6).reshape((2,3))
>>> a
array([[0, 1, 2],
[3, 4, 5]])
>>> a + 2
array([[2, 3, 4],
[5, 6, 7]])
>>> a * 3
array([[ 0, 3, 6],
[ 9, 12, 15]])
Operaciones Aritméticas entre arreglos
• Las operaciones aritméticas entre arreglos también se efectúan
elemento a elemento.
• a.sum(axis=num_axis)
• a.prod(axis=num_axis)
h = np.array([[1,3,5],[2,6,7],[3,6,5]])
a.sum(axis=0)
1 3 5
La operación se realizará
sobre las columnas 2 6 7
a.sum(axis=0) 3 6 5
La operación se realizará
sobre las filas
a.sum()
La operación se realizará
sobre todos los elementos
h = np.array([[1,3,5],[2,6,7],[3,6,5]])
suma=a.sum(axis=0)
1 3 5
La operación se realizará
sobre las columnas 2 6 7
print(suma) 3 6 5
6 15 17
[ 6 15 17]
h = np.array([[1,3,5],[2,6,7],[3,6,5]])
suma=a.sum(axis=1)
1 3 5 9
La operación se realizará
sobre las filas 2 6 7 15
print(suma) 3 6 5 14
[ 9 15 14]
h = np.array([[1,3,5],[2,6,7],[3,6,5]])
suma=a.sum()
1 3 5
La operación se realizará
sobre las filas 2 6 7
print(suma) 3 6 5
38
Operaciones básicas – Ordenamiento.
a = np.array([2, 4, 3], float)
• a.min(axis=num_axis)
• a.max(axis=num_axis)
• a.sort(axis=num_axis)
h = np.array([[1,3,5],[2,6,7],[3,6,5]])
maximo= a.argmax(axis=0)
0 1 2
La operación se realizará
sobre las columnas 1 3 5 0
print(maximo) 2 6 7 1
3 6 5 2
[ 2 1 1]
a.argsort(axis=num_axis)
numpy.unravel_index
• Convierte un índice plano en una
tupla de índices para un arreglo
de una forma determinada.
Ejercicio
Operaciones básicas – Estadísticas.
a = np.array([2, 4, 3], float)
>>> 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