NumPy proporciona diversas maneras de crear arrays, facilitando la realización de cálculos numéricos y análisis de datos de manera eficiente en Python.
1. Creación de Arrays a partir de Listas
Podemos crear un array a partir de una lista o una lista de listas:
Al crear un array, podemos especificar el tipo de datos que contendrá utilizando el parámetro dtype. Esta especificación es crucial para la eficiencia y precisión en cálculos numéricos. Aquí se detallan algunos de los tipos de datos más comunes:
int32: Entero de 32 bits.
float32: Número de punto flotante de 32 bits.
float64: Número de punto flotante de 64 bits (por defecto para números flotantes en NumPy).
bool: Valores booleanos (True o False).
complex64: Número complejo de 64 bits.
complex128: Número complejo de 128 bits.
str: Cadenas de texto.
Podemos especificar estos tipos de datos al crear el array utilizando el parámetro dtype:
pythonCopiar código
# Array de enteros
int_array = np.array([1,2,3], dtype='int32')# Array de flotantes
float_array = np.array([1.0,2.0,3.0], dtype='float32')# Array de booleanos
bool_array = np.array([True,False,True], dtype='bool')# Array de números complejos
complex_array = np.array([1+2j,3+4j], dtype='complex64')# Array de cadenas de texto
str_array = np.array(['a','b','c'], dtype='str')
Algunos de estos tipos también pueden ser especificados con abreviaturas en el parámetro dtype. Por ejemplo, 'd' es equivalente a float64, que es el tipo de datos de punto flotante de 64 bits en NumPy:
# Creando un array con dtype 'd'(equivalente a float64)array_float64 = np.array([1,2,3], dtype='d')print(array_float64)
4. NaN (Not a Number)
NaN es un valor especial utilizado para representar datos que no son números, especialmente en el contexto de operaciones matemáticas que no tienen un resultado definido. Por ejemplo, la división de cero por cero (0/0) o la raíz cuadrada de un número negativo.
Rendimiento: NumPy es mucho más rápido y eficiente para operaciones matemáticas y científicas.
Tipos de Datos: NumPy requiere homogeneidad de tipos, mientras que las listas de Python pueden contener múltiples tipos.
Funcionalidad: NumPy proporciona una rica funcionalidad específica para cálculos numéricos.
Slicing e Indexación: NumPy ofrece herramientas avanzadas para manipular subconjuntos de datos.
NumPy es la mejor opción. Para usos más generales y cuando se necesita mayor flexibilidad en los tipos de datos, las listas de Python son más adecuadas.
¿Por qué usamos lo arrays en Numpy?
Los arrays en NumPy se utilizan porque ofrecen una estructura eficiente y flexible para manejar grandes volúmenes de datos numéricos. Estos son algunos de los motivos:
Eficiencia: Los arrays de NumPy son más rápidos y utilizan menos memoria que las listas de Python. Esto se debe a que NumPy está implementado en C y realiza operaciones matemáticas de manera muy eficiente.
Operaciones Vectorizadas: NumPy permite realizar operaciones matemáticas y lógicas sobre arrays enteros sin necesidad de bucles explícitos. Esto se conoce como vectorización y resulta en un código más limpio y rápido.
Funcionalidad Extendida: NumPy proporciona una amplia gama de funciones matemáticas y estadísticas que se pueden aplicar directamente a los arrays. Además, facilita la manipulación de datos, como la reshaping, slicing, y indexing de arrays.
Compatibilidad: NumPy es el fundamento de muchos otros paquetes científicos y de análisis de datos en Python, como SciPy, Pandas, y scikit-learn. Utilizar NumPy facilita la integración y el uso de estas bibliotecas.
Le pedí a ChatGPT una metáfora entre los Arrays de Numpy y Caperucita Roja y el resultado es fascinante. Me ayudo a entender mejor los conceptos:
Metáfora de Arrays en NumPy con la Fábula de Caperucita Roja
Imagina que el bosque por el que camina Caperucita Roja representa el vasto mundo de datos que necesitamos analizar. En este bosque, cada árbol es un dato individual, y hay millones de ellos. Intentar manejar cada árbol de manera individual sería agotador y poco eficiente, similar a usar listas de Python para grandes conjuntos de datos.
Ahora, considera la cesta que lleva Caperucita Roja. Esta cesta es como un array de NumPy. A continuación, se explica la metáfora en detalle:
Cesta Eficiente: La cesta está perfectamente diseñada para llevar una gran cantidad de elementos (manzanas, bayas, etc.) de manera organizada y eficiente. Al igual que la cesta, un array de NumPy está optimizado para almacenar y manipular datos de forma compacta y rápida.
Operaciones Sencillas: Caperucita puede realizar operaciones fácilmente con la cesta, como agregar, quitar o contar los elementos sin tener que preocuparse por cada uno de ellos de manera individual. Similarmente, NumPy permite realizar operaciones matemáticas y lógicas sobre todo el array de manera simultánea, sin tener que iterar sobre cada elemento.
Transformaciones Flexibles: Si Caperucita necesita reorganizar los elementos en la cesta, puede hacerlo fácilmente (por ejemplo, poner todas las bayas en un lado y las manzanas en otro). Esto es como reshaping y slicing en NumPy, donde puedes cambiar la estructura del array según tus necesidades.
Compatibilidad con el Bosque: La cesta de Caperucita está diseñada para ser compatible con el entorno del bosque, permitiéndole recoger diferentes tipos de frutos sin problemas. Del mismo modo, los arrays de NumPy son compatibles con una amplia gama de bibliotecas y herramientas en Python, facilitando el análisis y procesamiento de datos de manera integral.
En resumen, los arrays en NumPy son como la cesta de Caperucita Roja: una herramienta eficiente y flexible que facilita la recolección, organización y manipulación de grandes volúmenes de datos en el vasto bosque de la información.
Excelente aporte para poder tener mejor manejado los conceptos!
Excelente aporte, me sirivó para entender mejor la clase <3
Muy buena clase.
Quiero dar un aporte para los estudian para Data Engineers.
Este curso me ha servido mucho para el trabajo.
Tengo optimizar la velocidad de código hecho con numpy y pandas en Python migrando a Polars el equivalente hecho en Rust entendí por que polars es mas rápido por esta clase.
Python no tiene array numpy los trae arrays de C a CPython y Python perdiendo velocidad, Rust es Zero Cost Abstracción llamar codigo de Rust desde Python no perjudica el performance.
Numpy es perfecto para empezar pero cuando ya toca optimizar polars es mejor y sabiendo numpy y pandas aprendes el 80% de lógica de polars por eso este curso me ayudo tanto.
Hola William, ¿quieres decir que si aprendemos bien los fundamentos de numpy y pandas, no tendremos problemas migrando nustro código a polars?
Utilizamos las listas cuando necesitamos flexibilidad y se manejan varios tipos de datos, por otro lado, usamos arrays al trabajar con grandes cantidades de datos numericos
En el análisis de datos, los arrays suelen ser preferidos debido a su eficiencia y optimización para operaciones matemáticas.
Los Array de NumPy pueden definirse utilizando secuencias de Python como listas y tuplas. Las listas y tuplas se definen utilizando [...] y (...), respectivamente. Las listas y tuplas pueden definir la creación de ndarray.
NumPy tiene más de 40 funciones incorporadas para crear arrays, como se indica en las rutinas de creación de arrays.
Off-topic: Detesto cuando comentan los resultados que les da chat gpt a sus consultas. Creo que todos tenemos acceso a IA y que cada uno si tiene una duda general puede aclarar su duda con la IA. Pero no hace falta que comenten las salidas de sus IA aca, es redundante y no estan generando contenido de valor ya que no es su propio contenido, es un texto generado por la IA al cual todos podemos acceder.
¿Qué son los Arrays en Numpy?
Arrays en NumPy son herramientas versátiles utilizadas para representar imágenes, sonidos y otros tipos de datos científicos.
Arrays en NumPy son estructuras de datos multidimensionales que permiten:
Almacenar datos homogéneos (todos del mismo tipo).
Tener múltiples dimensiones (vectores, matrices, etc.).
Realizar operaciones matemáticas de manera eficiente.
Acceder y modificar datos fácilmente con indexación y slicing.
El término dtype o data type se refiere a un objeto en Numpy que describe el tipo de los elementos en un array. Este concepto incluye dos aspectos clave:
Tipo de dato: puede ser entero, flotante, booleano, entre otros.
Tamaño del dato: puede variar, por ejemplo, 8 bits, 32 bits, 64 bits, etc.
Ejemplos de dtypes en Numpy:
Uint8: Representa un número entero sin signo de 8 bits, que abarca valores entre 0 y 255.
Float32: Número de punto flotante de 32 bits, utilizado para representar valores con decimales.
Float64: Número de punto flotante de 64 bits con doble precisión. Este es el tipo de dato por defecto en Numpy para números decimales.
Les recomiendo ampliamente usar VSCode ya que Google Collab no es muy intuitivo como editor de código, incluso la profesora le batalla para encontrar los errores.
la desviacion estandar es por todo el conjunto de datos, no de cada uno de los numeros.
Diferencias:
Las listas son felixbles, pero menos eficientes para calculos completos, mientras que los arrays son muchos mejores para relizar operaciones estadísticas o matemáticas complejas en grandes volúmenes de datos.
También existe el tipo de dato complex64, que es un tipo de dato de 64 bits con números complejos, es un tipo de dato que se utiliza para cálculos con números complejos
La principal diferencia entre arrays y listas son algunos metodos que son diferentes y no son compartidos entre ellos, Pero hay otras diferencias importantes:
Listas
Flexibilidad: Las listas pueden contener elementos de diferentes tipos de datos en un solo contenedor.
Métodos: Tienen métodos como append(), remove(), insert(), entre otros.
Uso: Se utilizan para almacenar colecciones heterogéneas de datos.
Arrays
Homogeneidad: Los arrays generalmente contienen elementos del mismo tipo de datos.
Métodos: Tienen métodos más específicos a la manipulación numérica, como los ofrecidos por la biblioteca NumPy en Python (sum(), mean(), max(), etc.).
Uso: Son más eficientes en términos de espacio y se utilizan para operaciones matemáticas y científicas.
Las listas son más versátiles, mientras que los arrays son más eficientes para operaciones específicas y cálculos numéricos.
Considero que la diferencia funcional entre las listas (Python) y los arrays (Numpy), es que en los arrays hay mayor variedad de tipos de datos (dtype) lo que nos da mejores opciones para trabajar con ellos y usarlos de manera eficiente.
En Python, las listas priorizan la flexibilidad llegando a sacrificar rendimiento, mientras que los arrays optimizan en rendimiento, pero se deben definir desde el principio y no pueden mutar.
# Lista en Python
lista = [1, "hola", 3.5, True]
print(lista) # [1, 'hola', 3.5, True]
En la lista, mezclar tipos es válido, pero no puedes multiplicar todos sus elementos por 2 directamente.
En el array, todos los elementos son enteros y la operación matemática se aplica de forma eficiente a todo el conjunto.
La principal diferencia es que las listas en Python pueden contener elementos de distintos tipos de datos (heterogéneos), mientras que los arrays suelen estar limitados a un solo tipo de dato (homogéneos) y son más eficientes en operaciones numéricas.
¿Cuál es la principal diferencia entre el uso de listas y el uso de arrays dentro de la librería Numpy de Python?
Explicación encontrada en Gemini:
" 1. Tipo de Datos Contenidos (Homogeneidad vs. Heterogeneidad)
Listas de Python (Heterogéneas):
Una lista estándar de Python puede contener elementos de diferentes tipos de datos (por ejemplo, números enteros, cadenas de texto, y objetos float mezclados) en la misma estructura.
Internamente, una lista almacena punteros a las ubicaciones de memoria de sus elementos, lo que permite esta flexibilidad.
Ejemplo:mi_lista = [10, "hola", 3.14, True]
Arrays de NumPy (Homogéneos):
Un array de NumPy solo puede contener elementos de un único tipo de datos específico (por ejemplo, todos enteros, o todos float64).
Esta restricción es crucial para su rendimiento, ya que los datos se almacenan de manera contigua y uniforme en la memoria, lo que permite optimizaciones.
Ejemplo:mi_array = np.array([10, 20, 30]) (todos son enteros)
2. Eficiencia y Operaciones Numéricas (Vectorización)
Listas de Python (Ineficientes para Cálculos Masivos):
Para realizar una operación numérica en todos los elementos (como sumar 5 a cada número), se necesita usar un bucle explícito (for), lo que consume más tiempo y es menos eficiente, especialmente con grandes volúmenes de datos.
La mayoría de los operadores matemáticos estándar de Python (como + o *) están definidos para la concatenación o repetición de listas, no para operaciones por elementos.
Arrays de NumPy (Muy Eficientes y Optimizados):
Los arrays de NumPy están optimizados para el cálculo numérico rápido y usan técnicas de vectorización.
La vectorización significa que las operaciones (suma, resta, multiplicación, etc.) se aplican a todos los elementos del array simultáneamente sin necesidad de bucles explícitos. Esto se logra mediante implementaciones subyacentes en C.
Esto hace que los arrays de NumPy sean mucho más rápidos y consuman menos memoria que las listas para cálculos numéricos grandes.
Ejemplo: Para un array a = np.array([1, 2, 3]), la operación a + 5 devuelve array([6, 7, 8]) instantáneamente. ".
Las diferencias entre listas y arrays en Python son significativas.
Tipo de datos: Las listas pueden contener elementos de diferentes tipos (enteros, cadenas, etc.), mientras que los arrays de NumPy son homogéneos, es decir, todos los elementos deben ser del mismo tipo.
Rendimiento: Los arrays son más eficientes en términos de memoria y velocidad para operaciones matemáticas debido a su implementación en C. Las listas son más flexibles, pero pueden ser más lentas para cálculos masivos.
Funciones matemáticas: NumPy ofrece una amplia gama de funciones matemáticas y estadísticas avanzadas que no están disponibles para listas.
Dimensiones: Los arrays pueden ser multidimensionales, lo que los hace ideales para manejar datos complejos, como matrices, mientras que las listas son unidimensionales por defecto.
Esta diferencia es crucial para proyectos que requieren análisis de datos eficientes.