Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
●
Universidad
●
Pedagógica y Tecnológica de ●Colombia
● ●
●
●
● ● ●
●●
●
● ● ●
● ● ● ●
●● ●
●
● ●
● ● ● ● ●
●●● ●
NumPy
● ●
● ●● ●
● ●● ●
● ● ● ● ●
Arreglos NumPy
● ●
● ● ● ● ●
● ● ● ● ●
● ● ● ● ● ●
● ●● ● ● ●
● ● ●
●
● ● ● ● ● ●
● ● ● ● ●
●
●● ●
● ● ● ●
●
● ● ●
● ● ●
● ● ●
● ●
● ●
Problema central
● ● ●
● ●● ●
● ●
Alex L. Rojas
●
● ●
●
●
● ●
●
●
https://alexrojas.netlify.app/post/prog/
●
●
●
● ●
●
●
●
● ●
● ●
● ● ●●● ●
● ●
● ●
● ●
●
Los arreglos n-dimensionales, las estructuras básicas del módulo NumPy, El código anterior carga el módulo ‘NumPy‘ con el alias ‘np‘, el cual es el
son conocidos también como arreglos ‘NumPy‘ o simplemente como alias estándar para este módulo. Usamos el objeto numeros_1al8 para
arreglos. Cada arreglo ‘NumPy‘ es un contenedor homogéneo de crear varios objetos de tipo ‘ndarray‘, a los que llamaremos de ahora en
elementos de tamaño inmutable, es decir, todos sus elementos son del adelante arreglos ‘NumPy‘. Para esto, usamos la función ‘np.array()‘, que
mismo tipo y su forma no cambia. Consideremos los arreglos ‘NumPy‘ es el constructor principal de los arreglos ‘NumPy‘, es decir, la función
definidos en el siguiente código: que crea objetos tipo ‘ndarray‘.
1 import numpy as np Por defecto, ‘np.array()‘ asigna 8 ‘bytes‘ (64 ‘bits‘) de memoria, pero en
2 numeros_1al8 = range (1 ,9) situaciones en las que sabemos que necesitamos menos memoria
3 enteros8bytes = np . array ( numeros_1al8 )
4 enteros4bytes = np . array ( numeros_1al8 , dtype = ’ int32 ’)
podemos reducirle a 4, 2, o 1 ‘byte‘. Así fue como creamos los arreglos
5 enteros2bytes = np . array ( numeros_1al8 , dtype = ’ int16 ’) ‘enteros4bytes‘, ‘enteros2bytes‘ y ‘enteros1byte‘, respectivamente.
6 enteros1byte = np . array ( numeros_1al8 , dtype = ’ int8 ’)
7 M a t r i z E n t e r o s 8 b y t e s = np . array ([ numeros_1al8 , numeros_1al8 , No solo podemos definir arreglos donde todos sus elementos son enteros,
8 numeros_1al8 ]) también es posible que sean todos de punto flotante, complejos,
booleanos o enteros sin signo.
Tabla: Resumen de algunas de las funciones para generar arreglos NumPy Example
Queremos definir un arreglo ‘Numpy‘ para representar la matriz P
Nombre de la función Tipo de arreglo creado definida como
0 1
np.meshgrid() Arreglos de coordenadas con base en vectores 11 1 1 1 1 1 1
de coordenadas. B 1 21 1 1 1 1 1 C
B C
np.ones() Arreglo de unos con dimensiones especifica- B 1 1 31 1 1 1 1 C
B C
das por el usuario. P=B B 1 1 1 41 1 1 1 C .
C
np.random.choice() Arreglo con una muestra aleatoria de tamaño B 1 1 1 1 51 1 1 C
B C
especificado por la usuaria proveniente de un @ 1 1 1 1 1 61 1 A
arreglo unidimensional 1 1 1 1 1 1 71
np.random.rand() Arreglo de números aleatorios uniformemen-
te distribuidos entre 0 y 1. Es decir, queremos construir una matriz de 7 ⇥ 7 donde todos los números
np.sort() Copia del arreglo original ordenado. fuera de la diagonal son iguales a uno, y en la diagonal encontramos los
np.zeros() Arreglo de ceros con dimensiones especifica- números 11, 21, 31, 41, 51, 61 y 71. Luego P puede ser construída
das por el usuario. sumando dos matrices: una matriz de solo unos, y otra cuyos elementos
en la diagonal son los números del 10 al 70 contando de 10 en 10.
Alex L. Rojas | Programación Alex L. Rojas | Programación
Example
Queremos graficar las curvas de nivel de la función Example
Queremos inicializar un arreglo ‘NumPy‘ con el siguiente formato:
f (x, y ) = sen(x) + cos(x),
0 1 2 3 4
en la región R = [ 2⇡, 2⇡] ⇥ [0, 4⇡]. Para hacer este gráfico necesitamos 1 0 1 2 3
evaluar la función en una malla de puntos en la región R. Tomemos la 2 1 0 1 2
malla tal que las coordenadas en el eje y corresponden a la partición del 3 2 1 0 1
intervalo [0, 4⇡] en diez subintervalos de igual longitud. Mientras que las 4 3 2 1 0
coordenadas de la malla en el eje x está dada por los puntos
xi = 2⇡ + 0.5 · (i 1) con i = 0, 1, 2, . . . , 26. Podemos verificar fácilmente que la posición (i, j) en este arreglo
corresponde al valor |i j|, luego podemos usar la función
1 puntosEnX = np . arange ( -2* np . pi ,2* np . pi ,.5)
2 puntosEnY = np . linspace (0 ,4* np . pi ,11) ‘np.fromfunction()‘ para crearlo de la siguiente manera:
3 xs , ys = np . meshgrid ( puntosEnX , puntosEnY ) 1 DistC = np . fromfunction ( lambda i , j : abs (i - j ) , (5 ,5) , dtype =
4 f_eval = np . sin ( xs ) + np . cos ( ys ) int )
5 fig = plt . figure ( figsize =(10 ,10) )
6 plt . contourf ( puntosEnX , puntosEnY , f_eval )
7 plt . colorbar ()
Dado un arreglo con valores booleanos, este puede ser usado para indicar
las posiciones de un arreglo que queremos seleccionar. Es decir, si una
posición tiene el valor verdadero (‘True‘) esto le indica a ‘Python‘ que
1 X = np . random . uniform (0 ,100 ,(10 ,2) ) esta posición debe seleccionarse, de otra manera se enmascara, es decir,
2 X _E st a nd a ri za d a = ( X - X . mean ( axis =0) ) / X . std ( axis =0)
se oculta. Por ejemplo,
En el ejemplo anterior, el arreglo ‘X‘ tiene una forma ‘(10,2)‘, mientras 1 a = np . array ([2 , 3.5 , -2 , -4.5 , 4 , 5 , -3.5 , 17])
que la agregación ‘X.mean(axis=0)‘ tiene una forma ‘(2,)‘, luego la 2 mascara = [ True , False , False , True , True , False , False ,
operación ‘X-X.mean(axis=0)‘ está restando a cada fila del arreglo ‘X‘ el True ]
3 a [ mascara ]
vector de medias y genera un arreglo con forma ‘(10,2)‘. Ahora la
operación ‘(X-X.mean(axis=0))/X.std(axis=0)‘ está dividiendo cada fila En este caso se seleccionan las posiciones 0, 3, 4 y 7, ya que el restos
de ‘(X-X.mean(axis=0))‘ entre las desviaciones estándar de cada fueron enmascaradas.
columna de ‘X‘, y produce de nuevo un arreglo con forma ‘(10,2)‘. En la lista anterior podemos seleccionar fácilmente los elementos que
sean positivos, o aquellos elementos cuyo cuadrado sea menor que 16:
1 a [ a > 0]
2 a [ a **2 < 16]
Example
Queremos definir un arreglo ‘Numpy‘ para representar la matriz P
definida como
Example 0 1
Dado un arreglo de números, queremos encontrar los elementos del 0 0 0 0 0 0 0
B 0 1 1 1 1 1 0 C
arreglo que estén dos desviaciones estándar alejados de su promedio y B C
B 0 1 2 2 2 1 0 C
reemplazarlos con su mediana. Para esto, calculamos la media, la B C
desviación estándar y la mediana de los números. Luego buscamos los P=B B 0 1 2 3 2 1 0 C.
C
B 0 1 2 2 2 1 0 C
elementos del arreglo que cumplan la condición ‘ abs(a - np.mean(a)) > B C
@ 0 1 1 1 1 1 0 A
2*np.std(a)‘, que son los que son reemplazados por ‘np.median(a)‘:
0 0 0 0 0 0 0
1 a [ abs ( a - np . mean ( a ) ) > 2* np . std ( a ) ] = np . median ( a )
Una manera de crear este arreglo en ‘Python‘ es usar el siguiente código.
1 P = np . zeros ((7 ,7) )
2 P [1: -1 ,1: -1] = 1
3 P [2: -2 ,2: -2] = 2
4 P [3: -3 ,3: -3] = 3
Note que la forma de ‘sumaXfila‘ es ‘(n,)‘, ya que calculamos la suma 1 def p r o b T o t a l A c o t a d a (P , epsilon ) :
para n filas y la forma de P es ‘(n,p)‘, luego al aplicar las reglas de 2 P [ P > 1 - epsilon ] = 1 - epsilon
broadcasting no sería posible dividir cada elemento de una fila por la 3 P [ P < epsilon ] = epsilon
4 sumaXfila = P . sum ( axis =1)
suma de la fila ya que terminamos con arreglos con formas ‘(n,p)‘ y 5 P = P / sumaXfila [: , np . newaxis ]
‘(1,n)‘. 6 return P