Redes Neurais em IA e Deep Learning - página 67

 

2.6 K-vecinos más cercanos en Python (L02: métodos de vecinos más cercanos)



2.6 K-vecinos más cercanos en Python (L02: métodos de vecinos más cercanos)

Después de una discusión exhaustiva sobre los vecinos más cercanos a K, el texto procede a presentar un ejemplo de Python que muestra la implementación de los vecinos más cercanos a K utilizando la popular biblioteca scikit-learn. El autor reconoce que no todos los aspectos pueden quedar claros de inmediato y asegura a los lectores que las conferencias futuras profundizarán en Python, NumPy y scikit-learn. Sin embargo, el ejemplo proporcionado sirve como un adelanto para ofrecer una perspectiva de arriba hacia abajo sobre cómo funcionan estas herramientas.

Para respaldar el ejemplo de implementación, el autor hace referencia a un sitio web donde los lectores pueden encontrar ejemplos de código. Además, el autor explica el proceso de descargar un repositorio de GitHub usando el archivo zip o clonándolo. Al enfatizar la importancia de GitHub como una herramienta del mundo real, el autor sugiere que tener un perfil de GitHub y compartir proyectos puede ser ventajoso para mostrar el trabajo de uno a posibles empleadores.

El texto continúa proporcionando instrucciones detalladas sobre cómo clonar un repositorio utilizando el enlace de GitHub y el comando "git clone". Si bien reconoce que el proceso puede variar ligeramente para los usuarios de Windows, el autor recomienda buscar tutoriales o asistencia del TA (asistente de enseñanza). Una vez que el repositorio se clona con éxito, el autor indica a los lectores que naveguen hasta la carpeta y explica que se pueden obtener actualizaciones mediante el comando "git pull".

Pasando a los ejemplos de código, el autor demuestra cómo abrir un Jupyter Notebook, específicamente Jupyter Lab, y ejecutar comandos paso a paso. Para evitar abrumar a los lectores, el autor enfatiza la importancia de limpiar las salidas después de cada ejecución. Además, el autor menciona la utilidad de la extensión de marca de agua en Jupyter Notebooks, que muestra las versiones de los paquetes de software utilizados. Esta información ayuda en la solución de problemas y garantiza la replicabilidad de los resultados. Se instalan paquetes esenciales como Pandas, NumPy, Matplotlib y scikit-learn para facilitar la implementación.

A continuación, el autor carga el conjunto de datos de Iris desde un archivo CSV y muestra el uso de comandos como "cabeza" y "cola" para obtener una vista previa del conjunto de datos. Los datos se cargan en un Pandas DataFrame usando la función "read_csv". Si bien señala que el aprendizaje automático generalmente emplea matrices NumPy, el autor destaca que scikit-learn también es compatible con DataFrames. Para ilustrar esto, el autor proporciona un ejemplo de extracción de columnas específicas del DataFrame para crear una matriz NumPy. La forma de la matriz, que indica el número de ejemplos de entrenamiento y funciones, se muestra con el comando "forma".

El texto describe una serie de pasos que constituyen un flujo de trabajo de aprendizaje automático utilizando Python y la biblioteca scikit-learn. Aquí hay un resumen detallado de estos pasos:

  1. Mezclar índices y etiquetas: el autor inicia el flujo de trabajo discutiendo el proceso de mezclar índices y etiquetas en un conjunto de datos. El propósito de mezclar es aleatorizar el orden de los puntos de datos, asegurando que cada etiqueta corresponda a la fila correcta en la matriz de características.

  2. División del conjunto de datos: el conjunto de datos se divide en un conjunto de entrenamiento y un conjunto de prueba. El autor selecciona manualmente los primeros 105 ejemplos para el conjunto de entrenamiento y reserva los 45 ejemplos restantes para el conjunto de prueba. Esta división es crucial para evaluar el rendimiento del modelo de aprendizaje automático.

  3. Introducción a scikit-learn y el conjunto de datos Iris: el autor presenta la biblioteca scikit-learn, específicamente la implementación del conjunto de datos Iris y la función "train_test_split". El conjunto de datos Iris es un conjunto de datos popular ampliamente utilizado para tareas de clasificación. La función "train_test_split" mezcla automáticamente el conjunto de datos y lo divide en las proporciones especificadas para el entrenamiento y la prueba.

  4. Visualización usando una matriz de diagrama de dispersión: el autor proporciona una función conveniente llamada "matriz de diagrama de dispersión" para visualizar el conjunto de datos. Esta función utiliza la biblioteca matplotlib para crear una matriz de diagrama de dispersión con histogramas que se muestran en la diagonal. La matriz de diagrama de dispersión representa visualmente las relaciones entre las diferentes características en el conjunto de datos.

  5. Demostración de la matriz de diagramas de dispersión: el autor demuestra el uso de la matriz de diagramas de dispersión trazando el conjunto de datos de Iris. Se asignan diferentes colores para representar diferentes clases de flores. En particular, el autor destaca que las características específicas, como la longitud y el ancho de los pétalos, son particularmente útiles para distinguir entre diferentes clases de flores.

  6. Introducción al clasificador de k-vecinos más cercanos (k-NN): el autor procede a explicar el clasificador de k-vecinos más cercanos (k-NN), que es un algoritmo sencillo que clasifica los puntos de datos en función de su proximidad a los puntos de datos vecinos. Para instanciar el clasificador k-NN, el autor crea un objeto con tres vecinos.

  7. Ajuste del clasificador k-NN: El clasificador k-NN se ajusta al conjunto de entrenamiento utilizando el método de "ajuste". Este paso entrena el modelo utilizando los datos de entrenamiento proporcionados.

  8. Predicción en el conjunto de prueba: el autor emplea el clasificador k-NN ajustado para hacer predicciones en el conjunto de prueba utilizando el método "predecir". Las predicciones se almacenan en una variable llamada "pred".

  9. Evaluación del rendimiento: para evaluar el rendimiento del modelo, el autor compara las etiquetas predichas (almacenadas en "pred") con las etiquetas verdaderas del conjunto de prueba (almacenadas en "y_test"). Al calcular el número de predicciones correctas, se puede determinar la precisión del modelo en el conjunto de prueba.

  10. Conclusión y exploración adicional: la conferencia concluye alentando a los lectores a explorar la documentación de scikit-learn para obtener información adicional sobre el algoritmo de k-vecinos más cercanos y sus diversas opciones. Además, el autor plantea una pregunta a los lectores sobre la métrica de distancia predeterminada utilizada por el clasificador k-NN y sugiere un ejercicio para investigar y discutir este aspecto.

La conferencia proporciona una explicación completa de varios temas, incluido el concepto de vecinos más cercanos K, una implementación de ejemplo utilizando la biblioteca scikit-learn, pautas para descargar y clonar repositorios de GitHub, una introducción a Jupyter Notebook y Jupyter Lab, cargar un conjunto de datos en un Pandas DataFrame, y demostrando la extracción de columnas y la conversión a arreglos NumPy.

2.6 K-nearest neighbors in Python (L02: Nearest Neighbor Methods)
2.6 K-nearest neighbors in Python (L02: Nearest Neighbor Methods)
  • 2020.09.10
  • www.youtube.com
In this video, we are talking about using k-nearest neighbors in Python using scikit-learn. Jupyter Notebook: https://github.com/rasbt/stat451-machine-learni...
 

3.1 (Opcional) Descripción general de Python



3.1 (Opcional) Descripción general de Python

Espero que todos estén teniendo una gran semana hasta ahora y disfrutando de las conferencias. Hoy, quiero discutir algunos temas importantes tratados en las conferencias recientes.

En primer lugar, tuvimos una conferencia sobre la mejora de Canaan, seguida de una conferencia sobre la implementación de kin en Python usando el aprendizaje psíquico. Según sus comentarios de la introducción a la prueba para conocerlos, descubrí que la mayoría de ustedes tienen experiencia en programación o han tomado una clase de programación antes. Esta es una gran noticia porque será muy beneficiosa para ti en este curso. Sin embargo, noté que solo la mitad de ustedes tiene una experiencia sólida con Python. Por lo tanto, antes de sumergirnos en la computación científica con Python y explorar el aprendizaje psíquico con más detalle, pensé que sería útil brindar ayuda para configurar Python para aquellos que son nuevos en él. Esto asegurará que la próxima lección sea más fluida para todos.

En una nota más ligera, disfruté mucho leer sobre tus pasatiempos favoritos. Parece que muchos de ustedes comparten mi amor por las actividades al aire libre como el esquí de fondo, correr y caminar. Pasar tiempo en la naturaleza es realmente refrescante, aunque entiendo que los días lluviosos y los largos inviernos pueden limitar esas oportunidades. Algunos de ustedes también mencionaron su interés en los videojuegos, y un estudiante incluso mencionó la serie Zelda. Debo admitir que también soy un gran admirador de la serie y disfruto jugando durante los días nevados de Navidad o después de un día ajetreado para relajarme.

Continuando, como prometí, la conferencia de hoy será opcional. Si ya tiene una sólida experiencia con Python y tiene Python configurado en su computadora, puede omitir los siguientes tres videos. Sin embargo, si eres nuevo en Python o necesitas ayuda para configurarlo, te recomiendo verlos. Estos videos le brindarán motivación y consejos prácticos basados en mi propia experiencia con Python. Es importante tener en cuenta que no necesita ser un programador experto para usar Python en este curso. Nos centraremos en los conceptos básicos necesarios para el aprendizaje automático y aprenderá más a medida que avancemos.

La próxima semana, tendremos nuestra primera tarea real, donde implementará un algoritmo de K-vecino más cercano. Esta tarea requerirá que escriba su propio código, además de utilizar el aprendizaje psíquico. Por lo tanto, sería beneficioso para usted configurar Python esta semana como preparación para la tarea. No te preocupes; la tarea está diseñada para ayudarlo a comprender mejor el algoritmo KNN y no será demasiado difícil ya que es la primera tarea. Una vez que completemos esta tarea, profundizaremos en los aspectos conceptuales del aprendizaje automático.

Antes de continuar, echemos un vistazo rápido al progreso del curso. En la primera semana, cubrimos la introducción al aprendizaje automático y los vecinos más cercanos de K. Actualmente, estamos en la segunda semana, centrándonos en los fundamentos computacionales. Estos fundamentos son cruciales, ya que los usaremos más adelante para implementar varios conceptos de aprendizaje automático. Por lo tanto, es esencial que nos familiaricemos con Python y su uso desde el principio. En esta lección, hablaremos principalmente de Python y cómo configurarlo. Tenga en cuenta que haré una demostración del proceso de configuración en mi Mac, pero nuestro TA puede ayudarlo con cualquier pregunta relacionada con Windows.

Python es un lenguaje de programación interpretado y dinámico, lo que lo hace más interactivo y fácil de usar en comparación con lenguajes de tipado estático como C o C++. Si bien Python puede ser más lento que estos lenguajes, no es una preocupación importante para nuestros propósitos. Muchas bibliotecas de computación científica, que exploraremos en la próxima lección, están escritas en C o Fortran y ofrecen tiempos de ejecución rápidos. Python es un lenguaje de programación multipropósito ampliamente utilizado en varias aplicaciones, incluidos marcos web como Django y servicios populares como Instagram y Dropbox.

Ahora, comparemos Python con un lenguaje de tipo estático como C escribiendo un programa simple. En C, necesitamos declarar variables y especificar explícitamente sus tipos de datos, como enteros, flotantes o caracteres. He aquí un ejemplo de un programa simple en C:

#include <stdio.h>

int main() {
     int age = 25 ;
     float height = 1.75 ;
     char initial = 'J' ;

    printf( "My age is %d\n" , age);
    printf( "My height is %.2f meters\n" , height);
    printf( "My initial is %c\n" , initial);

     return 0 ;
}
En este programa en C, declaramos las variables edad, altura e inicial con sus respectivos tipos de datos. Luego asignamos valores a estas variables y las imprimimos usando printf().

Ahora, comparemos el mismo programa en Python:

age = 25
height = 1.75
initial = 'J'

print( "My age is" , age)
print( "My height is" , height, "meters" )
print( "My initial is" , initial)
En Python, no necesita declarar explícitamente tipos de variables. Puede asignar valores directamente a las variables y Python inferirá automáticamente los tipos de datos. La función print() se utiliza para mostrar la salida.

La simplicidad y legibilidad de Python lo convierten en una excelente opción tanto para principiantes como para programadores experimentados. Tiene un vasto ecosistema de bibliotecas y marcos que lo hacen adecuado para la computación científica, el análisis de datos, el aprendizaje automático y más.

Ahora, pasemos a configurar Python en su computadora. Hay diferentes formas de instalar Python, pero recomiendo usar la distribución Anaconda, que viene preempaquetada con muchas bibliotecas útiles para la computación científica. Estos son los pasos para instalar Anaconda:

  1. Visite el sitio web de Anaconda ( https://www.anaconda.com/products/individual ) y descargue el instalador apropiado para su sistema operativo (Windows, macOS o Linux).

  2. Ejecute el instalador y siga las instrucciones en pantalla. Puede elegir las opciones de instalación predeterminadas a menos que tenga preferencias específicas.

  3. Una vez completada la instalación, debe tener Anaconda Navigator y Anaconda Prompt (o Anaconda PowerShell Prompt) instalados en su computadora. Estas son herramientas convenientes para administrar entornos y paquetes de Python.

  4. Abra Anaconda Navigator y haga clic en la pestaña "Entornos". Aquí puede crear un nuevo entorno para este curso. Haga clic en el botón "Crear", proporcione un nombre para el entorno (por ejemplo, "aprendizaje automático") y elija la versión de Python (preferiblemente Python 3.x). Haga clic en "Crear" para crear el entorno.

  5. Una vez creado el entorno, haga clic en la pestaña "Inicio" en Anaconda Navigator. Debería ver una lista de aplicaciones y entornos disponibles. Seleccione su entorno recién creado en el menú desplegable en la parte superior de la ventana.

  6. En la pestaña "Inicio", haga clic en el botón "Instalar" en la sección Jupyter Notebook. Esto instalará Jupyter Notebook, que usaremos para la programación interactiva y la ejecución del código de Python.

  7. Después de la instalación, haga clic en el botón "Iniciar" junto a Jupyter Notebook. Esto abrirá una nueva pestaña en su navegador web, ejecutando Jupyter Notebook.

¡Felicidades! Ha instalado correctamente Python y Jupyter Notebook con la distribución de Anaconda. Ahora está listo para comenzar a codificar en Python para este curso. En la próxima lección, profundizaremos en la computación científica con Python y exploraremos la popular biblioteca llamada scikit-learn.

Si encuentra algún problema durante el proceso de instalación o tiene alguna pregunta, no dude en preguntar en el foro de discusión o comuníquese con el TA para obtener ayuda.

Tenga en cuenta que estas instrucciones son específicas para Anaconda, pero si prefiere usar una distribución de Python diferente, como Miniconda o la distribución estándar de Python, aún puede seguir el curso.

3.1 (Optional) Python overview
3.1 (Optional) Python overview
  • 2020.09.16
  • www.youtube.com
In this optional videos, I mainly talk about the use of Python in this course. I will also show a quick demo using C (a statically typed language) vs Python....
 

3.2 (Opcional) Configuración de Python


3.2 (Opcional) Configuración de Python

En el segundo video del curso, discutiremos el proceso de configuración y cómo instalar Python. En el video anterior, cubrimos los conceptos básicos de los lenguajes de programación interpretados y dinámicos, destacando Python como un lenguaje interpretado dinámico.

Antes de continuar con la instalación, es importante ver el video y abstenerse de instalar nada en su computadora mientras lo ve. Esta medida de precaución garantiza que tenga un conocimiento completo de las diferentes opciones de instalación antes de tomar una decisión. La instalación de software sin los conocimientos adecuados puede dar lugar a arrepentimientos más adelante.

Para comenzar, se recomienda verificar si ya tiene instalada una versión actualizada de Python en su computadora. En Mac o Linux, puede usar el comando "cuál de Python" para determinar la ubicación y la versión de la instalación. De manera similar, en Windows, puede usar el comando "dónde" para encontrar la ubicación de instalación.

Muchas Mac vienen tradicionalmente con una versión desactualizada de Python, específicamente Python 2. Se recomienda encarecidamente actualizar Python, ya que Python 2 ya no es compatible con la comunidad de Python. Idealmente, se recomienda instalar Python 3.8 o 3.7, ya que la versión 3.9 aún está en desarrollo.

El método oficial para instalar Python es visitar python.org y descargar el instalador. Sin embargo, un enfoque alternativo que a menudo se prefiere es usar Anaconda o, más específicamente, Miniconda. Miniconda es una versión liviana de Anaconda que no incluye bibliotecas innecesarias, lo que ahorra espacio de almacenamiento en su computadora. Si bien Anaconda viene con bibliotecas preinstaladas, Miniconda permite un proceso de instalación más personalizado.

Personalmente, el instructor recomienda usar Miniconda debido a su conveniencia y la experiencia positiva que muchos miembros de la comunidad informática científica de Python han tenido con él. Miniconda ofrece un administrador de paquetes integral que garantiza que todas las versiones de paquetes requeridas estén instaladas y administra las dependencias de los paquetes. Esta función facilita el mantenimiento de un entorno de desarrollo estable y compatible.

Para instalar Miniconda, puede visitar el sitio web de documentación, docs.conda.io, y navegar a la última versión en inglés de la página de instalación de Miniconda. Desde allí, puede elegir el instalador apropiado para su sistema operativo. Para los usuarios de Mac, el instalador bash se usa comúnmente. Después de descargar el instalador, ejecute el script, acepte el acuerdo de licencia y elija la ubicación de instalación.

Una vez que se instala Miniconda, puede verificar su versión predeterminada de Python abriendo un shell de Python, que ahora debería mostrar la versión actualizada. Miniconda también proporciona herramientas para administrar diferentes entornos, lo que le permite crear entornos aislados para diferentes proyectos. Aunque no es necesario para este curso, estos entornos pueden ser útiles si trabaja en varios proyectos simultáneamente.

Para instalar paquetes, como el paquete "numpy" requerido para la próxima lección, puede usar el administrador de paquetes "pip" o el instalador de Conda. Dado que está utilizando Miniconda, se recomienda utilizar el instalador de Conda siempre que sea posible, ya que garantiza una mejor compatibilidad y gestión de versiones. Sin embargo, si un paquete no está disponible en Conda, puede recurrir al uso de "pip".

En caso de que necesite instalar paquetes no disponibles en Conda, como el paquete "mlxtend", puede explorar Conda Forge. Conda Forge es un repositorio impulsado por la comunidad que aloja bibliotecas respaldadas por la comunidad Conda en general. Al buscar el paquete deseado en Conda Forge, puede encontrar instrucciones de instalación específicas para ese paquete.

Recuerde que también puede actualizar paquetes usando el administrador de paquetes de Conda, usando comandos como "conda update" seguido del nombre del paquete, o con "pip" usando "pip install --upgrade" seguido del nombre del paquete.

Al seguir estas pautas de instalación y administración de paquetes, puede garantizar una configuración eficiente y sin problemas de Python para este curso.

Para instalar paquetes desde el canal Conda Forge, puede usar el siguiente comando:

conda install -c conda-forge <nombre-paquete>

Por ejemplo, para instalar el paquete MLX Extent de Conda Forge, usaría:

conda install -c conda-forge mlx_ext

Este comando buscará el paquete en el canal de Conda Forge y lo instalará en su entorno.

Si el paquete que necesita no está disponible en Conda Forge o cualquier otro canal de Conda, también puede usar el administrador de paquetes pip para instalarlo. Pip es el administrador de paquetes predeterminado para Python y le permite instalar paquetes desde el Índice de paquetes de Python (PyPI).

Para instalar un paquete usando pip, puede usar el siguiente comando:

pip install <nombre-paquete>

Por ejemplo, para instalar un paquete llamado "paquete de ejemplo" usando pip, usaría:

paquete de ejemplo de instalación de pip

Asegúrese de reemplazar <nombre del paquete> con el nombre real del paquete que desea instalar.

Tenga en cuenta que al usar Conda y pip, generalmente se recomienda usar Conda como el administrador de paquetes principal para mantener la compatibilidad de los paquetes y administrar las dependencias. Sin embargo, si un paquete no está disponible en Conda, usar pip es una alternativa adecuada.

Eso concluye las instrucciones de configuración para instalar Python y administrar paquetes usando Conda y pip. Recuerde ver el video tutorial antes de instalar cualquier cosa en su computadora y siga los pasos recomendados para garantizar un proceso de instalación sin problemas.

3.2 (Optional) Python setup
3.2 (Optional) Python setup
  • 2020.09.16
  • www.youtube.com
In this optional video, I am demonstrating how to install Python using Miniconda on macOS. Also, I provide some brief demo of the conda package manager.-----...
 

3.2 (Opcional) Configuración de Python


3.2 (Opcional) Configuración de Python

En el segundo video del curso, discutiremos el proceso de configuración y cómo instalar Python. En el video anterior, cubrimos los conceptos básicos de los lenguajes de programación interpretados y dinámicos, destacando Python como un lenguaje interpretado dinámico.

Antes de continuar con la instalación, es importante ver el video y abstenerse de instalar nada en su computadora mientras lo ve. Esta medida de precaución garantiza que tenga un conocimiento completo de las diferentes opciones de instalación antes de tomar una decisión. La instalación de software sin los conocimientos adecuados puede dar lugar a arrepentimientos más adelante.

Para comenzar, se recomienda verificar si ya tiene instalada una versión actualizada de Python en su computadora. En Mac o Linux, puede usar el comando "cuál de Python" para determinar la ubicación y la versión de la instalación. De manera similar, en Windows, puede usar el comando "dónde" para encontrar la ubicación de instalación.

Muchas Mac vienen tradicionalmente con una versión desactualizada de Python, específicamente Python 2. Se recomienda encarecidamente actualizar Python, ya que Python 2 ya no es compatible con la comunidad de Python. Idealmente, se recomienda instalar Python 3.8 o 3.7, ya que la versión 3.9 aún está en desarrollo.

El método oficial para instalar Python es visitar python.org y descargar el instalador. Sin embargo, un enfoque alternativo que a menudo se prefiere es usar Anaconda o, más específicamente, Miniconda. Miniconda es una versión liviana de Anaconda que no incluye bibliotecas innecesarias, lo que ahorra espacio de almacenamiento en su computadora. Si bien Anaconda viene con bibliotecas preinstaladas, Miniconda permite un proceso de instalación más personalizado.

Personalmente, el instructor recomienda usar Miniconda debido a su conveniencia y la experiencia positiva que muchos miembros de la comunidad informática científica de Python han tenido con él. Miniconda ofrece un administrador de paquetes integral que garantiza que todas las versiones de paquetes requeridas estén instaladas y administra las dependencias de los paquetes. Esta función facilita el mantenimiento de un entorno de desarrollo estable y compatible.

Para instalar Miniconda, puede visitar el sitio web de documentación, docs.conda.io, y navegar a la última versión en inglés de la página de instalación de Miniconda. Desde allí, puede elegir el instalador apropiado para su sistema operativo. Para los usuarios de Mac, el instalador bash se usa comúnmente. Después de descargar el instalador, ejecute el script, acepte el acuerdo de licencia y elija la ubicación de instalación.

Una vez que se instala Miniconda, puede verificar su versión predeterminada de Python abriendo un shell de Python, que ahora debería mostrar la versión actualizada. Miniconda también proporciona herramientas para administrar diferentes entornos, lo que le permite crear entornos aislados para diferentes proyectos. Aunque no es necesario para este curso, estos entornos pueden ser útiles si trabaja en varios proyectos simultáneamente.

Para instalar paquetes, como el paquete "numpy" requerido para la próxima lección, puede usar el administrador de paquetes "pip" o el instalador de Conda. Dado que está utilizando Miniconda, se recomienda utilizar el instalador de Conda siempre que sea posible, ya que garantiza una mejor compatibilidad y gestión de versiones. Sin embargo, si un paquete no está disponible en Conda, puede recurrir al uso de "pip".

En caso de que necesite instalar paquetes no disponibles en Conda, como el paquete "mlxtend", puede explorar Conda Forge. Conda Forge es un repositorio impulsado por la comunidad que aloja bibliotecas respaldadas por la comunidad Conda en general. Al buscar el paquete deseado en Conda Forge, puede encontrar instrucciones de instalación específicas para ese paquete.

Recuerde que también puede actualizar paquetes usando el administrador de paquetes de Conda, usando comandos como "conda update" seguido del nombre del paquete, o con "pip" usando "pip install --upgrade" seguido del nombre del paquete.

Al seguir estas pautas de instalación y administración de paquetes, puede garantizar una configuración eficiente y sin problemas de Python para este curso.

Para instalar paquetes desde el canal Conda Forge, puede usar el siguiente comando:

conda install -c conda-forge <nombre-paquete>

Por ejemplo, para instalar el paquete MLX Extent de Conda Forge, usaría:

conda install -c conda-forge mlx_ext

Este comando buscará el paquete en el canal de Conda Forge y lo instalará en su entorno.

Si el paquete que necesita no está disponible en Conda Forge o cualquier otro canal de Conda, también puede usar el administrador de paquetes pip para instalarlo. Pip es el administrador de paquetes predeterminado para Python y le permite instalar paquetes desde el Índice de paquetes de Python (PyPI).

Para instalar un paquete usando pip, puede usar el siguiente comando:

pip install <nombre-paquete>

Por ejemplo, para instalar un paquete llamado "paquete de ejemplo" usando pip, usaría:

paquete de ejemplo de instalación de pip

Asegúrese de reemplazar <nombre del paquete> con el nombre real del paquete que desea instalar.

Tenga en cuenta que al usar Conda y pip, generalmente se recomienda usar Conda como el administrador de paquetes principal para mantener la compatibilidad de los paquetes y administrar las dependencias. Sin embargo, si un paquete no está disponible en Conda, usar pip es una alternativa adecuada.

Eso concluye las instrucciones de configuración para instalar Python y administrar paquetes usando Conda y pip. Recuerde ver el video tutorial antes de instalar cualquier cosa en su computadora y siga los pasos recomendados para garantizar un proceso de instalación sin problemas.

3.2 (Optional) Python setup
3.2 (Optional) Python setup
  • 2020.09.16
  • www.youtube.com
In this optional video, I am demonstrating how to install Python using Miniconda on macOS. Also, I provide some brief demo of the conda package manager.-----...
 

3.3 (Opcional) Ejecutar código Python


3.3 (Opcional) Ejecutar código Python

En el tercer y último video de la lección tres, demostraré diferentes métodos para ejecutar código Python. Este video se centrará en los cuadernos de Júpiter, un formato de archivo y un programa que permite la codificación, la escritura de texto, la representación de ecuaciones y el trazado convenientes en un solo documento, que se utilizará para la próxima tarea.

Antes de sumergirse en los cuadernos de Júpiter, primero le mostraré la forma más fácil de ejecutar el código de Python, que es usar el intérprete de Python o lo que algunas personas llaman REPL (Read-Eval-Print Loop). El intérprete permite la ejecución interactiva del código Python, lo que significa que el código se evalúa inmediatamente. Para usar el intérprete, puede abrir su terminal y escribir "python". Desde allí, puede ingresar expresiones de Python y ver los resultados de inmediato. Por ejemplo, escribir "imprimir (1 + 2)" mostrará el resultado "3". También puede usar el intérprete para tareas más complejas, como recorrer valores e imprimirlos.

Si bien el intérprete puede ser útil para cálculos o cálculos rápidos, no se recomienda para escribir código más complicado. Puede ser fácil perder el rastro de los cálculos y volverse engorroso desplazarse hacia atrás y encontrar comandos ejecutados anteriormente. Por lo tanto, para código más complejo, es preferible usar un script de Python o un cuaderno de Júpiter.

A continuación, presento un intérprete de Python interactivo alternativo llamado IPython. IPython ofrece características y funcionalidades adicionales en comparación con el intérprete normal, incluido el coloreado de sintaxis, la función de historial para modificar fácilmente el código y los comandos mágicos. Los comandos mágicos son comandos especiales que comienzan con un signo de porcentaje (%) y brindan funcionalidades útiles. Un ejemplo de ello es el comando mágico "timeit", que permite comparar diferentes implementaciones de código. Demuestro esto implementando dos funciones para invertir cadenas y comparando su eficiencia usando el comando "timeit".

Después de mostrar los beneficios de IPython, explico que los portátiles de Júpiter originalmente se llamaban portátiles de IPython porque se construyeron sobre IPython. Incluso ahora, las notebooks de Jupiter confían en IPython y brindan los mismos beneficios y características adicionales. Para instalar IPython, uso Conda y muestro el sitio web de IPython para obtener más documentación.

Continuando, analizo el segundo método para ejecutar el código de Python, que utiliza scripts de Python. Este método implica crear un archivo con una extensión .py, escribir el código en el archivo y ejecutarlo desde la línea de comandos. Proporciono un ejemplo de un script de Python que usa un bucle para imprimir números del 0 al 4.

Finalmente, menciono la importancia de adherirse a las pautas de estilo de codificación, como PEP 8, para escribir código limpio y legible. Muestro cómo usar un linter, como Flake8, en un entorno de desarrollo integrado como Visual Studio Code puede ayudar a identificar y corregir problemas de estilo, mejorando la calidad general del código.

El video cubrió diferentes formas de ejecutar el código de Python, incluido el uso del intérprete, la creación de scripts de Python y el aprovechamiento de los beneficios de los cuadernos IPython y Jupiter. Cada método tiene sus propias ventajas y es adecuado para diferentes propósitos.

3.3 (Optional) Running Python code
3.3 (Optional) Running Python code
  • 2020.09.16
  • www.youtube.com
In this third and last video of the optional lecture 3, I am demonstrating the different ways for running Python code: the REPL, IPython, .py scripts, and Vi...
 

4.1 Introducción a NumPy (L04: Computación científica en Python)



4.1 Introducción a NumPy (L04: Computación científica en Python)

En este tutorial, cubriremos los conceptos básicos de NumPy, incluida la creación de matrices, el acceso a elementos, la realización de operaciones de matriz y más. ¡Vamos a empezar!

Para comenzar, necesitamos importar la biblioteca NumPy. Convencionalmente, se importa bajo el alias np. Ejecute el siguiente código para importar NumPy:

import numpy as np
Ahora que hemos importado NumPy, creemos nuestra primera matriz. Las matrices NumPy se crean utilizando la función np.array(), que toma una lista de Python como entrada. Ejecute el siguiente código para crear una matriz:

arr = np.array([1, 2, 3, 4, 5])
print(arr)
Debería ver el siguiente resultado:

[1 2 3 4 5]
¡Felicidades! Ha creado su primera matriz NumPy. Ahora exploremos algunas operaciones básicas que podemos realizar en arreglos.

Acceso a los elementos de la matriz

Para acceder a los elementos en una matriz NumPy, podemos usar la indexación y el corte, similar a las listas de Python. La indexación comienza en 0.

Ejecute el siguiente código para acceder a los elementos de la matriz:

print (arr[ 0 ])   # Access the first element
print (arr[ 2 ])   # Access the third element
print (arr[- 1 ])   # Access the last element
La salida será:

1
3
5
También podemos usar el corte para acceder a un rango de elementos en una matriz. La sintaxis para dividir es start:stop:step, donde start es el índice inicial, stop es el índice final (exclusivo) y step es el tamaño del paso.

Ejecute el siguiente código para dividir la matriz:

print (arr[ 1 : 4 ])   # Access elements from index 1 to 3
print (arr[:: 2 ])   # Access every other element

La salida será:

[2 3 4]
[1 3 5]
Operaciones de matriz

Las matrices NumPy admiten varias operaciones matemáticas, como suma, resta, multiplicación y división. Estas operaciones se aplican por elementos a las matrices.

Ejecute el siguiente código para realizar operaciones de matriz:

arr1 = np. array ([ 1 , 2 , 3 ])
arr2 = np. array ([ 4 , 5 , 6 ])

# Addition
print (arr1 + arr2)

# Subtraction
print (arr1 - arr2)

# Multiplication
print (arr1 * arr2)

# Division
print (arr1 / arr2)
La salida será:

 [5 7 9]
[-3 -3 -3]
[4 10 18]
[0.25 0.4  0.5]
NumPy también proporciona varias funciones matemáticas que se pueden aplicar a las matrices. Por ejemplo, la función np.sin() se puede usar para calcular el seno de una matriz.

Ejecute el siguiente código para aplicar una función matemática a una matriz:

arr = np. array ([ 0 , np.pi/ 2 , np.pi])

# Calculate sine
print (np.sin(arr))
La salida será:

[0.0000000e+00 1.0000000e+00 1.2246468e-16]

Forma de matriz y remodelación

La forma de una matriz NumPy representa sus dimensiones, como el número de filas y columnas. Podemos usar el atributo de forma para verificar la forma de una matriz.

Ejecute el siguiente código para verificar la forma de una matriz:

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape)
La salida será:

(2, 3)
También podemos cambiar la forma de una matriz usando la función reformar(). Esta función nos permite cambiar el tamaño de una matriz sin cambiar sus datos.

Ejecute el siguiente código para remodelar una matriz:

arr = np.array([1, 2, 3, 4, 5, 6])
reshaped_arr = arr.reshape((2, 3))
print(reshaped_arr)
La salida será:

[[1 2 3]
 [4 5 6]]
Estas son solo algunas de las operaciones básicas que puede realizar con NumPy. La biblioteca proporciona una amplia gama de funciones y capacidades para trabajar con arreglos de manera eficiente. Lo animo a explorar la documentación de NumPy para obtener más información sobre sus características.
4.1 Intro to NumPy (L04: Scientific Computing in Python)
4.1 Intro to NumPy (L04: Scientific Computing in Python)
  • 2020.09.20
  • www.youtube.com
This first video in the "L04: Intro to Scientific Computing in Python" introduces NumPy on a basic level before diving into more details in the following vid...
 

4.2 Construcción e indexación de matrices NumPy (L04: Computación científica en Python)



4.2 Construcción e indexación de matrices NumPy (L04: Computación científica en Python)

En el segundo video, me gustaría hablar sobre la construcción e indexación de matrices que no son de Python. Las rutinas de construcción de arreglos son bloques de construcción o funciones útiles para crear arreglos. Son útiles cuando necesita una matriz de marcador de posición que luego puede completar con valores específicos. Permítanme demostrar lo que quiero decir.

Para crear una matriz completa con el número uno, podemos usar la función ones. Por ejemplo, ones((3, 3)) generará una matriz de 3x3 con todos los elementos establecidos en uno. También puede especificar diferentes dimensiones, como ones((3, 4)), que creará una matriz de 3x4 llena de unos. La función ones acepta varios argumentos, incluido el parámetro dtype, que determina el tipo de datos de la matriz (el valor predeterminado es float64 para máquinas de 64 bits). Puede establecerlo en int64 para crear una matriz de enteros. Además, puede especificar el parámetro de orden, que controla cómo se distribuye la matriz en la memoria. El valor predeterminado es C, que representa el estilo de fila principal, pero puede elegir F para el diseño de estilo Fortran. Sin embargo, para esta clase, no necesita preocuparse por estos detalles, ya que son más relevantes para combinar NumPy con código C o Fortran.

De manera similar, la función de ceros se puede usar para crear una matriz llena de ceros. Puedes usarlo de la misma manera que los. Recuerde, si desea obtener más información sobre estas funciones, puede usar la función de ayuda o usar un signo de interrogación (?) en Jupyter Lab o IPython.

También existe la función vacía, que crea una matriz vacía sin inicializar sus valores. En la mayoría de los casos, no necesitará preocuparse por los detalles de esta función, ya que simplemente crea una matriz con valores arbitrarios. La función identidad crea una matriz identidad, donde los elementos de la diagonal son unos y el resto son ceros. Se puede utilizar para crear una matriz diagonal con valores específicos.

Pasando a la indexación, la indexación básica en matrices NumPy es similar a la indexación en listas de Python. Puede acceder a los elementos usando corchetes. Por ejemplo, array[0] devuelve el primer elemento, array[1] devuelve el segundo elemento, y así sucesivamente. También es posible rebanar, al igual que con las listas de Python. Por ejemplo, matriz[1:4] devolverá una porción de la matriz del índice 1 al 3 (excluyendo el índice 4).

Cuando se trata de matrices bidimensionales, puede usar una notación de coma para indexar las dos dimensiones. El primer índice especifica la fila, mientras que el segundo índice especifica la columna. Por ejemplo, array[0, 0] devuelve el elemento de la primera fila y la primera columna, array[1, 2] devuelve el elemento de la segunda fila y la tercera columna, y así sucesivamente.

La indexación negativa se puede utilizar para acceder a elementos desde el final de una matriz. Por ejemplo, matriz[-1, -1] devolverá el último elemento de la matriz. De manera similar, array[-1, -2] devolverá el penúltimo elemento. Esto puede ser útil cuando se trabaja con matrices grandes, ya que no es necesario realizar un seguimiento de la longitud de la matriz.

Para recuperar una fila o columna completa, puede omitir uno de los índices. Por ejemplo, array[0, :] devuelve toda la primera fila y array[:, 1] devuelve toda la segunda columna. Esto es equivalente a especificar el rango de índices (por ejemplo, array[0, 0:3] para la primera fila). La división funciona en ambas dimensiones, lo que le permite seleccionar partes específicas de la matriz. Por ejemplo, array[1:3, 2:4] devuelve un subarreglo que consta de las filas 1 y 2 (excluyendo la fila 3) y las columnas 2 y 3 (excluyendo la columna 4).

La indexación booleana es otra característica poderosa en NumPy. Puede usar una matriz booleana para indexar una matriz, seleccionando solo los elementos que corresponden a valores verdaderos en la matriz booleana. Por ejemplo, supongamos que tenemos una matriz llamada matriz con la forma (3, 3):

array( [[1, 2, 3] ,
       [4, 5, 6] ,
       [7, 8, 9] ])

Podemos crear una matriz booleana basada en una condición, como matriz > 5, que devolverá la siguiente matriz booleana:

array([[ False , False , False ],
       [ False , False , True ],
       [ True , True , True ]])
Al usar esta matriz booleana como índice de la matriz original, podemos seleccionar solo los elementos que corresponden a valores verdaderos, lo que da como resultado:

array([6, 7, 8, 9])
La indexación booleana permite una selección flexible y eficiente de elementos en función de condiciones específicas.

Además de la indexación básica, NumPy proporciona técnicas de indexación avanzadas, como la indexación de matrices enteras y el uso de matrices como índices. Estas técnicas permiten operaciones de indexación más complejas y no contiguas en arreglos. Sin embargo, son temas más avanzados y es posible que no sean necesarios para la manipulación básica de matrices.

4.2 NumPy Array Construction and Indexing (L04: Scientific Computing in Python)
4.2 NumPy Array Construction and Indexing (L04: Scientific Computing in Python)
  • 2020.09.20
  • www.youtube.com
This video explains how we can construct arrays in NumPy and how we access individual elements via indexing operations.Link to the Jupyter notebook: https://...
 

4.3 NumPy Array Math y funciones universales (L04: Computación científica en Python)



4.3 NumPy Array Math y funciones universales (L04: Computación científica en Python)

Después de invertir una cantidad considerable de tiempo en crear una carrera e indexar valores individuales en una matriz, pasemos a un tema más intrigante: matriz no paga, matemáticas y funciones universales.

Las funciones universales, a menudo abreviadas como Ufunk o Frank, son un concepto poderoso en programación. Una función universal (Ufunk) es una forma abreviada de una función universal, que permite un trabajo más eficiente y conveniente con matrices Numpy. Introduce un concepto llamado vectorización.

La vectorización implica realizar una operación matemática o aritmética en una secuencia de objetos, como una matriz. En lugar de ejecutar la operación individualmente sobre cada elemento del arreglo, la vectorización nos permite realizar la operación en paralelo, aprovechando la falta de dependencias entre los elementos.

Por ejemplo, consideremos la tarea de agregar un número a cada elemento de una matriz. Con un bucle for de Python, iteraríamos sobre cada elemento y llamaríamos a una función de suma. Sin embargo, con la vectorización, podemos realizar la suma en toda la matriz simultáneamente, sin necesidad de un bucle. Esto mejora significativamente la eficiencia.

En Numpy, la vectorización se logra mediante funciones universales (Ufunk). Hay más de 60 Ufunk implementados en Numpy, cada uno con un propósito específico. Se recomienda consultar la documentación oficial para obtener una lista completa de Ufunk disponibles.

Para ilustrar el concepto, centrémonos en la suma de elementos, una operación común. Supongamos que tenemos una matriz bidimensional implementada como una lista de listas en Python. Si queremos agregar 1 a cada elemento, normalmente usaríamos bucles anidados o listas de comprensión. Sin embargo, estos enfoques pueden ser ineficientes, especialmente para arreglos grandes.

En Numpy, podemos usar el Ufunk "np.add" para agregar el número 1 a toda la matriz de forma vectorizada. Esto elimina la necesidad de bucles explícitos y mejora significativamente el rendimiento.

Vale la pena mencionar que Numpy aprovecha la sobrecarga de operadores, lo que permite un uso intuitivo de Ufunk. Por ejemplo, usar el operador "+" entre una matriz y un número invoca automáticamente el Ufunk "np.add".

Otro Ufunk útil es "np.square", que eleva al cuadrado cada elemento de una matriz. Las funciones de Ufunk pueden ser unarias (operando en un solo valor) o binarias (tomando dos argumentos). La documentación oficial de Numpy proporciona más detalles sobre el Ufunk disponible.

Pasando a un caso más interesante, exploremos el uso de Ufunk junto con el método "reducir". La operación "reducir" aplica una operación a lo largo de un eje específico, reduciendo múltiples valores en un solo valor. Por ejemplo, podemos calcular sumas de columnas usando "np.add" con el método "reduce".

En este escenario, nos desplazamos sobre el eje especificado (eje 0 en este caso) y combinamos los elementos usando la operación especificada. La operación "reducir" se asocia comúnmente con conceptos como "mapa reducir" y Hadoop, donde los cálculos se distribuyen en varios nodos y luego se combinan para producir el resultado final.

Si bien esto puede parecer abrumador, comprender estos conceptos permite una programación más eficiente y efectiva con Numpy. Al aprovechar Ufunk y la vectorización, podemos realizar operaciones complejas en arreglos con facilidad y optimizar nuestro código para mejorar el rendimiento.

Recuerde consultar la documentación oficial de Numpy para obtener una lista completa de Ufunk disponibles, así como ejemplos y pautas de uso. Explorar las posibilidades de Ufunk ampliará su conjunto de herramientas y lo ayudará a abordar varias tareas computacionales en proyectos futuros.

Entonces, en NumPy, tenemos una función llamada reduce, que nos permite realizar operaciones de reducción a lo largo de un eje específico de una matriz. La operación de reducción combina múltiples valores en un solo valor. De forma predeterminada, la reducción se aplica a lo largo del primer eje (eje 0) de la matriz.

Pongamos un ejemplo para entender mejor este concepto. Considere la siguiente matriz:

array( [[1, 2, 3] ,
       [4, 5, 6] ,
       [7, 8, 9] ])
Si queremos calcular las sumas de las columnas, podemos usar la función de reducción. Esta operación pasará sobre el primer eje (eje 0) y combinará los valores en cada columna. Entonces, el resultado será una matriz unidimensional que contiene las sumas de cada columna.

Para lograr esto, podemos usar la función np.add, que realiza la suma de elementos. Pasamos np.add como argumento de la función para reducir, lo que indica que queremos agregar los valores a lo largo del eje especificado.

Así es como se ve el código:

import numpy as np

array = np. array ([[ 1 , 2 , 3 ],
                  [ 4 , 5 , 6 ],
                  [ 7 , 8 , 9 ]])

column_sums = np.reduce(np.add, array )
print (column_sums)
La salida será:

[12 15 18]
En este ejemplo, la función reduce itera sobre las columnas de la matriz y suma los valores. Combina la primera columna (1 + 4 + 7), la segunda columna (2 + 5 + 8) y la tercera columna (3 + 6 + 9) en una sola matriz que representa las sumas de las columnas.

Este enfoque es más eficiente que iterar manualmente sobre las columnas y agregar los valores uno por uno. La operación vectorizada proporcionada por NumPy nos permite realizar el cálculo en paralelo, aprovechando los algoritmos subyacentes optimizados.

Tenga en cuenta que reduce se puede usar con otras funciones además de np.add, según la operación que desee realizar. El concepto de reducción es poderoso y se puede aplicar a muchos escenarios diferentes.

4.3 NumPy Array Math and Universal Functions (L04: Scientific Computing in Python)
4.3 NumPy Array Math and Universal Functions (L04: Scientific Computing in Python)
  • 2020.09.20
  • www.youtube.com
This video discusses one of the core aspects of NumPy: it's functions that allow us to work with NumPy arrays efficiently.Jupyter notebook: https://github.co...
 

4.4 NumPy Broadcasting (L04: Computación científica en Python)



4.4 NumPy Broadcasting (L04: Computación científica en Python)

NumPy ofrece una función fascinante conocida como "transmisión", que introduce dimensiones implícitas y nos permite realizar operaciones que normalmente serían imposibles dentro de los límites del álgebra lineal estricta. Este concepto de transmisión permite una mayor flexibilidad y conveniencia cuando se trabaja con arreglos.

Al aprovechar la transmisión, NumPy puede alinear automáticamente matrices con diferentes formas, esencialmente expandiéndolas para que coincidan y realicen operaciones con elementos. Esta creación de dimensión implícita nos permite ejecutar operaciones sin problemas en matrices de diferentes tamaños, lo que da como resultado un código conciso y eficiente.

En el contexto del álgebra lineal, donde el cumplimiento estricto de las reglas matemáticas gobierna las operaciones, la transmisión proporciona una herramienta poderosa para simplificar cálculos complejos. Nos permite realizar cálculos en matrices con formas dispares, eliminando la necesidad de remodelar manualmente o recorrer elementos.

Gracias a la transmisión, podemos aplicar sin esfuerzo operaciones en arreglos con dimensiones implícitas, logrando resultados que de otro modo requerirían una manipulación manual extensa. Esta capacidad amplía el alcance de lo que podemos lograr con NumPy, convirtiéndolo en una biblioteca versátil e indispensable para la computación científica y el análisis de datos.

4.4 NumPy Broadcasting (L04: Scientific Computing in Python)
4.4 NumPy Broadcasting (L04: Scientific Computing in Python)
  • 2020.09.20
  • www.youtube.com
One of the cool things about NumPy is that it allows us to "broadcast." Here, that means that it is creating implicit dimensions that allow us to do things t...
 

4.5 Indexación avanzada de NumPy -- Vistas y copias de la memoria (L04: Cómputo científico en Python)



4.5 Indexación avanzada de NumPy -- Vistas y copias de la memoria (L04: Cómputo científico en Python)

En este quinto video profundizaremos una vez más en el tema de la indexación. Sin embargo, a diferencia del video inicial donde cubrimos la indexación básica, ahora exploraremos la indexación avanzada. Este segmento presentará conceptos como vistas de memoria y creación de copias de memoria, que son prácticas cruciales para evitar errores no intencionales, como sobrescribir valores de matriz por error. Comprender esto es vital, ya que nos ayuda a prevenir errores y comportamientos inesperados en NumPy.

Ahora, comencemos. En la sección anterior, discutimos un aspecto de las matrices NumPy llamado "vistas". Las vistas se crean cuando usamos la indexación regular o las operaciones básicas de división. Estas vistas actúan como dimensiones implícitas, permitiéndonos realizar operaciones que no son factibles dentro del estricto marco matemático del álgebra lineal. Sin embargo, trabajar con vistas puede ser arriesgado ya que podríamos modificar accidentalmente la matriz original sin darnos cuenta.

Para ilustrar esto, consideremos un ejemplo simple. Supongamos que tenemos una matriz bidimensional con dos filas y tres columnas. Por conveniencia, asignaré la primera fila a una variable separada llamada "primera_fila". Ahora, aquí está el punto crucial: asignar la primera fila a una variable crea una vista, no un objeto nuevo. Significa que esta variable simplemente apunta a la ubicación de la matriz original en la memoria. En consecuencia, si modificamos los valores en esta variable, también modificaremos los valores correspondientes en la matriz original.

Para demostrar esto, incrementemos cada elemento en la variable "first_row" en 99. Ejecutar esta operación no solo cambiará los valores en la variable sino que también sobrescribirá los valores en la primera fila de la matriz original. Este comportamiento sirve como una pista de que estamos trabajando con una vista en lugar de un objeto independiente. No ser consciente de esto puede ser peligroso, ya que es fácil sobrescribir involuntariamente valores en la matriz original mientras se trabaja con una vista.

Por otro lado, las vistas pueden ser increíblemente útiles para la eficiencia de la memoria, ya que nos permiten evitar copias de matrices innecesarias. Sin embargo, hay situaciones en las que podemos querer crear una copia de una matriz explícitamente. Para ello, podemos utilizar la función "copiar", que genera un nuevo array con los mismos valores que el original. En el ejemplo provisto, creo una copia de la segunda fila de la matriz usando la función "copiar". Al hacer esto, cualquier modificación realizada a la variable "first_row" no afectará la matriz original.

Es importante tener en cuenta que, si bien la segmentación y la indexación basada en enteros crean vistas de memoria, existe otro tipo de indexación llamada "indexación elegante" que produce copias de la matriz. La indexación elegante se refiere al uso de múltiples índices enteros para seleccionar elementos específicos de una matriz. Esta característica se llama "elegante" porque no se admite en las listas regulares de Python. Sin embargo, NumPy nos permite realizar este tipo de indexación, que puede ser bastante potente.

Por ejemplo, en una lista normal de Python, no podemos recuperar simultáneamente el primer y el tercer elemento. Sin embargo, en NumPy, podemos lograr esto utilizando una indexación elegante. De manera similar, podemos usar la indexación elegante para seleccionar columnas específicas de una matriz bidimensional. Vale la pena señalar que la indexación elegante siempre da como resultado una copia de la matriz, no una vista.

La distinción entre vistas y copias está relacionada con las consideraciones de eficiencia en NumPy. Slicing nos permite almacenar en caché ciertos valores en la memoria, optimizando el rendimiento. Sin embargo, implementar este mecanismo de almacenamiento en caché con una indexación sofisticada no es sencillo, ya que no podemos extraer una porción contigua de memoria. En su lugar, seleccionamos valores individuales, lo que lleva a la creación de una nueva matriz. Este comportamiento explica por qué la indexación elegante produce copias en lugar de vistas.

Otro aspecto interesante de la indexación elegante es que nos permite reorganizar el orden de las columnas en una matriz. Al especificar los índices de columna deseados mediante una indexación elegante, podemos barajar las columnas según sea necesario.

Las máscaras booleanas en NumPy son una forma eficiente y poderosa de filtrar matrices en función de ciertas condiciones. Una máscara booleana es simplemente una matriz NumPy de valores booleanos (verdadero o falso) que tiene la misma forma que la matriz original. Al aplicar la máscara booleana a la matriz original, podemos seleccionar los elementos que satisfacen la condición dada y descartar el resto.

Para crear una máscara booleana, primero definimos una condición que devuelve un valor booleano para cada elemento de la matriz. Por ejemplo, digamos que tenemos una matriz llamada arr:

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
Podemos crear una máscara booleana basada en una condición, como seleccionar solo los elementos que son mayores que 3:
mask = arr > 3
La máscara booleana resultante, mask, será [False, False, False, True, True]. Cada elemento de la máscara corresponde a la misma posición en la matriz original, lo que indica si la condición es verdadera o falsa para ese elemento.

Para aplicar la máscara booleana y recuperar los elementos que cumplen la condición, simplemente podemos usar la máscara como un índice para la matriz:

filtered_arr = arr[mask]
El filtered_arr resultante será [4, 5], que contiene solo los elementos mayores que 3 de la matriz original.

Las máscaras booleanas se pueden combinar mediante operadores lógicos como & (y), | (o) y ~ (no) para crear condiciones más complejas. Por ejemplo:

mask = (arr > 2) & (arr < 5)
filtered_arr = arr[mask]
Esta condición selecciona elementos que son mayores que 2 y menores que 5, lo que hace que filtered_arr sea [3, 4].

Las máscaras booleanas son especialmente útiles cuando se trabaja con grandes conjuntos de datos o se realizan filtrados y análisis de datos. Permiten operaciones eficientes y concisas en matrices sin necesidad de bucles explícitos o comprobaciones de condiciones.

Además de filtrar matrices, las máscaras booleanas también se pueden usar para la asignación de elementos. Al asignar nuevos valores a los elementos seleccionados a través de la máscara booleana, podemos modificar partes específicas de la matriz en función de una condición.

En general, las máscaras booleanas brindan una forma flexible y eficiente de manipular y filtrar matrices NumPy en función de condiciones específicas, lo que las convierte en una herramienta valiosa en el procesamiento y análisis de datos.

4.5 NumPy Advanced Indexing -- Memory Views and Copies (L04: Scientific Computing in Python)
4.5 NumPy Advanced Indexing -- Memory Views and Copies (L04: Scientific Computing in Python)
  • 2020.09.20
  • www.youtube.com
We previously covered basic indexing. NumPy allows us to perform more advanced indexing beyond what regular Python lists are capable of. Jupyter notebook: ht...
Razón de la queja: