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/12 18:36]
admin [3. NumPy]
clase:iabd:pia:1eval:tema03 [2023/11/09 10:17] (actual)
admin [Ejercicios]
Línea 44: Línea 44:
 </sxh> </sxh>
  
-Usando un array se tarda 5,3 segundos mientras que usando numpy se arda **solo** 0,0119 segundos. La diferencia es abismal.+Usando un array se tarda 5,3 segundos mientras que usando numpy se arda **solo** 0,012 segundos. La diferencia es abismal.
  
  
Línea 335: 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 445: 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 461: 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 638: 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 701: 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 717: 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 809: 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 898: 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 929: 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 936: 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 987: 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 1047: 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 1261: 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.1668274602.txt.gz · Última modificación: 2022/11/12 18:36 por admin