Herramientas de usuario

Herramientas del sitio


clase:iabd:pia:1eval:tema03

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
clase:iabd:pia:1eval:tema03 [2022/11/09 16:41]
admin [Operaciones]
clase:iabd:pia:1eval:tema03 [2023/11/09 10:17] (actual)
admin [Ejercicios]
Línea 7: Línea 7:
 import numpy as np import numpy as np
 from time import perf_counter from time import perf_counter
 +
 +np.random.seed(5)
 +
 array_size = 10000000 array_size = 10000000
 array1 = np.random.rand(1,array_size) array1 = np.random.rand(1,array_size)
Línea 23: Línea 26:
  
 <sxh base> <sxh base>
-Resultado = 2500014.4872852117 +Resultado = 2499423.5030155224 
-Tiempo = 5.638066004001303 s+Tiempo = 5.321726399999989 s
 </sxh> </sxh>
  
Línea 37: Línea 40:
  
 <sxh base> <sxh base>
-Resultado = 2500014.4872851633 +Resultado = 2499423.5030155387 
-Tiempo = 0.009921844000928104 s+Tiempo = 0.011971984000069824 s
 </sxh> </sxh>
  
-Usando un array se tarda 5,segundos mientras que usando numpy se arda **solo** 0,009 segundos. La diferencia es abismal.+Usando un array se tarda 5,segundos mientras que usando numpy se arda **solo** 0,012 segundos. La diferencia es abismal.
  
  
Línea 332: Línea 335:
 Este //truco// de los booleanos, permite hacer una especie de filtros para buscar datos en los arrays de numpy Este //truco// de los booleanos, permite hacer una especie de filtros para buscar datos en los arrays de numpy
 </note> </note>
 +
 +<note warning>
 +Hemos visto que se pueden seleccionar filas o columnas independientes usando un array ''a%%[%% %%[%%0,3%%]%%,:%%]%%'' o ''a%%[%%:,%%[%%0,3%%]%% %%]%%'' pero lo que no podemos es hacerlo a la vez. 
 +
 +$$
 +\begin{pmatrix}
 +1 & 2 & 3 & 4\\
 +5 & 6 & 7 & 8\\
 +9 & 10 & 11 & 12\\
 +13 & 14 & 15 & 16
 +\end{pmatrix}
 +$$
 +
 +El siguiente código:
 +<sxh python>
 +a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
 +
 +a[[0,2],[1,3]]
 +</sxh>
 +
 +
 +Muestra ésto:
 +<sxh base>
 +[ 2 12]
 +</sxh>
 +
 +
 +¿De donde salen esos valores? Porque son lista de filas y columnas. Es decir que realmente quieres los puntos ''(0,1)'' y ''(2,3)'' que corresponden a los valores ''2'' y ''12''. Es decir que está indicando listas de puntos pero el primer parámetro son las filas y en el segundo parámetro son las columnas.
 +
 +¿entonces como podemos hacer lo que queríamos hacer de obtener la 2 filas y las 2 columnas? Generando primero la matriz con las filas que queremos y luego obteniendo las columnas que queremos.
 +
 +<sxh python>
 +a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
 +a[[0,2],:][:,[1,3]]
 +</sxh>
 +
 +<sxh python>
 +[[ 2  4]
 + [10 12]]
 +</sxh>
 +
 +</note>
 +
 +
  
 ===== Operaciones ===== ===== Operaciones =====
Línea 366: Línea 413:
 <note important>En este caso no estamos haciendo una multiplicación de matrices sino multiplicando los escalares de una y otra matriz. La multiplicación de matrices se hace con [[https://numpy.org/doc/stable/reference/generated/numpy.matmul.html|matmul]] </note> <note important>En este caso no estamos haciendo una multiplicación de matrices sino multiplicando los escalares de una y otra matriz. La multiplicación de matrices se hace con [[https://numpy.org/doc/stable/reference/generated/numpy.matmul.html|matmul]] </note>
  
-  * Varias operaciones. En este ejemplo se multiplica por 3, se le suma 7 y se eleva al cuadrado+  * Varias operaciones. En este ejemplo se multiplica por 3, se le suma 7 y se divide entre 9.
  
  
Línea 442: Línea 489:
 </note> </note>
  
-==== Añadir elementos ====+==== Añadir elementos con append ==== 
 +Para añadir filas o columnas se usa ''append''. El parámetro ''axis'' indica en que eje se añade, filas, columnas, etc.
  
-  * Se añaden elementos a un array con ''append''+$$ 
 +\begin{pmatrix} 
 +1 & 2 & 3\\ 
 +10 & 20 & 30\\ 
 +100 & 200 & 300 
 +\end{pmatrix} 
 +$$ 
 + 
 + 
 +  * Se añaden filas con ''axis=0''
  
 <sxh python> <sxh python>
Línea 458: Línea 515:
        [1000, 2000, 3000]])        [1000, 2000, 3000]])
 </sxh> </sxh>
 +
 +  * Se añaden columnas con ''axis=1''
 +<sxh python>
 +a=np.array([[1,2,3],[10,20,30],[100,200,300]])
 +a=np.append(a,[[4],[40],[400]], axis=1)
 +a
 +</sxh>
 +
 +<sxh base>
 +array([[  1,   2,   3,   4],
 +       [ 10,  20,  30,  40],
 +       [100, 200, 300, 400]])
 +</sxh>
 +
 +<note important>
 +Destacar que el elemento a añadir debe ser una columna '' [ [4],[40],[400] ]''</note>
 +
  
 ===== Información ===== ===== Información =====
Línea 635: Línea 709:
  
  
 +
 +==== Imprimir ====
 +Se puede imprimir un array de numpy con la función ''print'' pero a veces queremos que no salga la notación científica y para ello usaremos:''np.set_printoptions(suppress = True)''
 +
 +<sxh python>
 +a=np.array([0.000010,0.000020,0.000030,0.000040,0.000050])
 +print(a)
 +</sxh>
 +
 +<sxh base>
 +[1.e-05 2.e-05 3.e-05 4.e-05 5.e-05]
 +</sxh>
 +
 +
 +Pero si ejecutamos la orden ''np.set_printoptions(suppress = True)''
 +
 +<sxh python>
 +np.set_printoptions(suppress = True)
 +a=np.array([0.000010,0.000020,0.000030,0.000040,0.000050])
 +print(a)
 +</sxh>
 +
 +<sxh base>
 +[0.00001 0.00002 0.00003 0.00004 0.00005]
 +</sxh>
 +
 +
 +
 +Mas información:
 +  * [[https://numpy.org/doc/stable/reference/generated/numpy.set_printoptions.html|numpy.set_printoptions]]
  
  
Línea 698: Línea 802:
 a=np.array([10, 30, 60]) a=np.array([10, 30, 60])
 b=np.array([2,4,7]) b=np.array([2,4,7])
-c=np.column_stack((a,b))+np.column_stack((a,b))
 </sxh> </sxh>
  
Línea 714: Línea 818:
 \end{pmatrix} \end{pmatrix}
 $$ $$
 +
 +<note>
 +Aquí hay que fijarse la diferencia entre ''column_stack'' y ''append'' ya que ambas pueden hacer lo mismo pero con ''append'' es más complejo
 +
 +<sxh python>
 +a=np.array([10, 30, 60])
 +b=np.array([2,4,7])
 +np.append(a.reshape(-1,1),b.reshape(-1,1),axis=1)
 +</sxh>
 +
 +<sxh base>
 +array([[10,  2],
 +       [30,  4],
 +       [60,  7]])
 +</sxh>
 +
 + </note>
  
 ==== Transformar de matriz a array ==== ==== Transformar de matriz a array ====
Línea 806: Línea 927:
 array([[10, 20, 30], array([[10, 20, 30],
        [40, 60, 70]])        [40, 60, 70]])
 +</sxh>
 +
 +
 +==== Transformar de array a array ====
 +
 +  * Cambiar de fila a columna
 +
 +<sxh python>
 +np.array([1,2,3,4,5]).reshape(-1,1)
 +</sxh>
 +
 +<sxh base>
 +array([[1],
 +       [2],
 +       [3],
 +       [4],
 +       [5]])
 </sxh> </sxh>
  
Línea 895: Línea 1033:
  
 <note tip>Notar como se ha cambiado el tipo de datos ya que ahora es con decimales</note> <note tip>Notar como se ha cambiado el tipo de datos ya que ahora es con decimales</note>
 +
 +También podemos guardar estructuras más complejas como mapas con ''np.save'':
 +
 +<sxh python>
 +import numpy as np
 +
 +datos=np.array([
 +  {
 +    "a":[1,2,3,4],
 +    "b":[10,20,30,40]
 +  },{
 +    "a":[1.2,2.2,3.2,4.2],
 +    "b":[10.2,20.2,30.2,40.2]
 +  },{
 +    "a":[1.3,2.3,3.3,4.3],
 +    "b":[10.3,20.3,30.3,40.3]
 +  }
 +])
 +
 +print(datos)
 +print(datos[2]["a"])
 +np.save("datos.npy",datos)
 +</sxh>
 + 
 +<sxh base>
 +[{'a': [1, 2, 3, 4], 'b': [10, 20, 30, 40]}
 + {'a': [1.2, 2.2, 3.2, 4.2], 'b': [10.2, 20.2, 30.2, 40.2]}
 + {'a': [1.3, 2.3, 3.3, 4.3], 'b': [10.3, 20.3, 30.3, 40.3]}]
 +[1.3, 2.3, 3.3, 4.3]
 +</sxh>
 +
 +y volver a leerlas con ''np.load'':
 +
 +<sxh python>
 +nuevos_datos=np.load("datos.npy",allow_pickle=True)
 +print(nuevos_datos)
 +print(nuevos_datos[2]["a"])
 +</sxh>
 +
 +<sxh base>
 +[{'a': [1, 2, 3, 4], 'b': [10, 20, 30, 40]}
 + {'a': [1.2, 2.2, 3.2, 4.2], 'b': [10.2, 20.2, 30.2, 40.2]}
 + {'a': [1.3, 2.3, 3.3, 4.3], 'b': [10.3, 20.3, 30.3, 40.3]}]
 +[1.3, 2.3, 3.3, 4.3]
 +</sxh>
 +<note>
 +El argumento ''allow_pickle=True'' se usa para indicar que se puedan cargar objetos desde el fichero. Eso tiene riesgos de seguridad pero en nuestro entorno no suele ser un problema ya que suelen ser datos guardados por nosotros.
 +</note>
 ===== Ejercicios ===== ===== Ejercicios =====
  
Línea 926: Línea 1112:
 \end{pmatrix} \end{pmatrix}
 $$ $$
 +
  
   * Muestra el elemento de la fila 2º y la columna 3º. Es el valor del 7.   * Muestra el elemento de la fila 2º y la columna 3º. Es el valor del 7.
Línea 933: Línea 1120:
   * Muestra la 2º y 3º Fila    * Muestra la 2º y 3º Fila 
   * Muestra la última columna. Debe funcionar independientemente del número de columnas.   * Muestra la última columna. Debe funcionar independientemente del número de columnas.
-  * Muestra la 2º y 3º Columna y la 1º y 3º fila+  * Muestra la 2º y 4º Columna y la 1º y 3º fila
   * Muestra de la 2º a la 3º Columna y de la 1º a la 3º fila    * Muestra de la 2º a la 3º Columna y de la 1º a la 3º fila 
   * Muestra todas las columnas excepto la primera y la última. Debe funcionar independientemente del número de columnas.   * Muestra todas las columnas excepto la primera y la última. Debe funcionar independientemente del número de columnas.
Línea 984: Línea 1171:
 {{:clase:iabd:pia:1eval:cubo.png?direct&400|}} {{:clase:iabd:pia:1eval:cubo.png?direct&400|}}
  
-Ahora selecciona las celdas en rojo oscuro pero tambien las verdes y azules que hay por detras de las rojo oscuro.+Ahora selecciona las celdas en rojo oscuro pero también las verdes y azules que hay por detrás de las rojo oscuro.
  
 ==== Ejercicio 9: Matrices ==== ==== Ejercicio 9: Matrices ====
Línea 1044: Línea 1231:
  
 Calcula: Calcula:
-  * El Nº Máximo de neuronas que llegó a haber en cualquier red+  * El Nº Máximo de neuronas de una capa que llegó a haber  en cualquier red
   * El Nº máximo de neuronas que hubo en cada red   * El Nº máximo de neuronas que hubo en cada red
   * El Nº máximo de neuronas que hubo en cada capa   * El Nº máximo de neuronas que hubo en cada capa
Línea 1258: Línea 1445:
  
 <sxh base> <sxh base>
-  Red       Épocas     loss Mitad  loss Final    Tiempo (s) +  Nº  Red              Épocas    loss Mitad    loss Final    Tiempo (s) 
-----------  --------   ----------  ------------  --------- +----  -------------  --------  ------------  ------------  ------------ 
-2,4,1       30         0.4         0.6            0.4 +   0  4,8,4,2,1            20    0.209651     0.191906             0.79 
-4,8,8,2,1   34         0.3         0.           1.56 +   1  4,8,4,2,1            40    0.189802     0.111734             0.86 
-... +   2  8,16,8,4,          20    0.218724     0.190873             0.73 
-16,32,1     20         0.        0.9            12.71+    8,16,8,4,          40    0.187368     0.131706             0.87 
 +    16,32,16,8,        20    0.143569     0.0653756            0.72 
 +   5  16,32,16,8,        40    0.0548877    0.0046529            0.87 
 +   6  32,64,32,8,1         20    0.0211689    0.00260244           0.74 
 +    32,64,32,8,        40    0.00226261   7.84583e-05          0.87 
 +    64,128,64,8,       20    0.0129097    0.00143349           0.77 
 +    64,128,64,8,       40    0.00150978   8.06734e-05          1.16
 </sxh> </sxh>
  
clase/iabd/pia/1eval/tema03.1668008498.txt.gz · Última modificación: 2022/11/09 16:41 por admin