Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Listas y Arrays de NumPy | Uso Eficiente de Estructuras de Datos
Técnicas de Optimización en Python

bookListas y Arrays de NumPy

Elegir la estructura de datos adecuada puede afectar significativamente tanto la velocidad como el uso de memoria. Primero, exploremos las listas y comparémoslas con los arrays de NumPy para comprender cuándo y cómo utilizar estas estructuras de datos de manera eficaz.

List

Una list es uno de los tipos de datos más utilizados. Funciona como un array dinámico, lo que significa que su tamaño puede aumentar o disminuir según sea necesario. Las listas son versátiles y ofrecen acceso y modificación eficientes en índices arbitrarios. Sin embargo, operaciones como insertar o eliminar elementos, y buscar un elemento (verificar pertenencia), pueden volverse lentas en listas grandes. La excepción es la inserción o eliminación al final de la lista, que sigue siendo eficiente independientemente del tamaño de la lista.

Es recomendable utilizar listas en los siguientes escenarios:

  • Se requiere datos ordenados;
  • Acceso o modificación frecuente de elementos por índice;
  • Necesidad de almacenar diferentes tipos de datos (por ejemplo, enteros, cadenas o objetos personalizados);
  • No se requiere comprobación rápida de pertenencia ni inserción o eliminación rápida en el medio de la lista.
123456789101112131415
my_list = [10, 20, 30] # Access an element by index print(my_list[1]) # Modify an element at a specific index my_list[1] = 50 print(my_list) # Insert an element at the end of the list my_list.append(40) print(my_list) # Remove an element from the end of the list my_list.pop() print(my_list)
copy

Array de NumPy

Aunque las listas son versátiles, no son las más eficientes para operaciones numéricas a gran escala. Aquí es donde entran en juego los arrays de NumPy.

Los arrays de NumPy están implementados en C, lo que los hace mucho más rápidos que las listas para operaciones numéricas. Un factor clave es la vectorización, que permite realizar operaciones sobre arrays completos a la vez, sin necesidad de bucles explícitos. Esto conduce a mejoras significativas en el rendimiento, especialmente con conjuntos de datos grandes.

Veamos un ejemplo de cómo elevar al cuadrado cada elemento en una lista (utilizando un for dentro de una list comprehension) y en un array de NumPy (utilizando la vectorización):

1234567891011121314151617181920
import numpy as np import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator my_list = list(range(1, 100001)) arr = np.array(my_list) @timeit_decorator(number=100) def square_list(numbers_list): return [x ** 2 for x in numbers_list] @timeit_decorator(number=100) def square_array(numbers_array): return numbers_array ** 2 sqaures_list = square_list(my_list) squares_array = square_array(arr) if np.array_equal(squares_array, sqaures_list): print('The array is equal to the list')
copy

Como se puede observar, la ventaja de rendimiento de los arrays de NumPy es bastante evidente.

Al trabajar con datos numéricos, los arrays de NumPy ofrecen una ventaja de memoria sobre las listas. Almacenan datos reales en bloques de memoria contiguos, lo que los hace más eficientes, especialmente para conjuntos de datos grandes. Al ser homogéneos (mismo tipo de dato), los arrays de NumPy evitan la sobrecarga de referencias a objetos.

En contraste, las listas son heterogéneas, almacenando referencias a objetos en memoria contigua, mientras que los objetos reales se almacenan en otro lugar. Esta flexibilidad introduce una sobrecarga adicional de memoria al trabajar con datos numéricos.

En resumen, la siguiente tabla compara las listas con los arrays de NumPy:

1. Está desarrollando un programa para gestionar una colección de objetos Sensor (clase personalizada), cada uno con un timestamp (cadena) y una reading (flotante). El conjunto de datos crecerá con el tiempo y se requieren actualizaciones frecuentes de las lecturas individuales de los sensores. ¿Qué estructura de datos sería la mejor opción?

2. Está trabajando con un gran conjunto de datos numéricos para un proyecto de aprendizaje automático. ¿Qué estructura de datos proporcionaría el rendimiento más eficiente para esta tarea?

3. Está analizando datos del mercado de valores, que consisten en valores numéricos (precios) a lo largo del tiempo. Necesita realizar cálculos rápidos, como encontrar el precio promedio y aplicar transformaciones matemáticas a los datos. ¿Qué estructura de datos elegiría?

question mark

Está desarrollando un programa para gestionar una colección de objetos Sensor (clase personalizada), cada uno con un timestamp (cadena) y una reading (flotante). El conjunto de datos crecerá con el tiempo y se requieren actualizaciones frecuentes de las lecturas individuales de los sensores. ¿Qué estructura de datos sería la mejor opción?

Select the correct answer

question mark

Está trabajando con un gran conjunto de datos numéricos para un proyecto de aprendizaje automático. ¿Qué estructura de datos proporcionaría el rendimiento más eficiente para esta tarea?

Select the correct answer

question mark

Está analizando datos del mercado de valores, que consisten en valores numéricos (precios) a lo largo del tiempo. Necesita realizar cálculos rápidos, como encontrar el precio promedio y aplicar transformaciones matemáticas a los datos. ¿Qué estructura de datos elegiría?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 1

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Suggested prompts:

Can you explain more about when to use lists versus NumPy arrays?

What are some common mistakes when choosing between lists and NumPy arrays?

Can you give more examples of operations that are faster with NumPy arrays?

Awesome!

Completion rate improved to 7.69

bookListas y Arrays de NumPy

Desliza para mostrar el menú

Elegir la estructura de datos adecuada puede afectar significativamente tanto la velocidad como el uso de memoria. Primero, exploremos las listas y comparémoslas con los arrays de NumPy para comprender cuándo y cómo utilizar estas estructuras de datos de manera eficaz.

List

Una list es uno de los tipos de datos más utilizados. Funciona como un array dinámico, lo que significa que su tamaño puede aumentar o disminuir según sea necesario. Las listas son versátiles y ofrecen acceso y modificación eficientes en índices arbitrarios. Sin embargo, operaciones como insertar o eliminar elementos, y buscar un elemento (verificar pertenencia), pueden volverse lentas en listas grandes. La excepción es la inserción o eliminación al final de la lista, que sigue siendo eficiente independientemente del tamaño de la lista.

Es recomendable utilizar listas en los siguientes escenarios:

  • Se requiere datos ordenados;
  • Acceso o modificación frecuente de elementos por índice;
  • Necesidad de almacenar diferentes tipos de datos (por ejemplo, enteros, cadenas o objetos personalizados);
  • No se requiere comprobación rápida de pertenencia ni inserción o eliminación rápida en el medio de la lista.
123456789101112131415
my_list = [10, 20, 30] # Access an element by index print(my_list[1]) # Modify an element at a specific index my_list[1] = 50 print(my_list) # Insert an element at the end of the list my_list.append(40) print(my_list) # Remove an element from the end of the list my_list.pop() print(my_list)
copy

Array de NumPy

Aunque las listas son versátiles, no son las más eficientes para operaciones numéricas a gran escala. Aquí es donde entran en juego los arrays de NumPy.

Los arrays de NumPy están implementados en C, lo que los hace mucho más rápidos que las listas para operaciones numéricas. Un factor clave es la vectorización, que permite realizar operaciones sobre arrays completos a la vez, sin necesidad de bucles explícitos. Esto conduce a mejoras significativas en el rendimiento, especialmente con conjuntos de datos grandes.

Veamos un ejemplo de cómo elevar al cuadrado cada elemento en una lista (utilizando un for dentro de una list comprehension) y en un array de NumPy (utilizando la vectorización):

1234567891011121314151617181920
import numpy as np import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator my_list = list(range(1, 100001)) arr = np.array(my_list) @timeit_decorator(number=100) def square_list(numbers_list): return [x ** 2 for x in numbers_list] @timeit_decorator(number=100) def square_array(numbers_array): return numbers_array ** 2 sqaures_list = square_list(my_list) squares_array = square_array(arr) if np.array_equal(squares_array, sqaures_list): print('The array is equal to the list')
copy

Como se puede observar, la ventaja de rendimiento de los arrays de NumPy es bastante evidente.

Al trabajar con datos numéricos, los arrays de NumPy ofrecen una ventaja de memoria sobre las listas. Almacenan datos reales en bloques de memoria contiguos, lo que los hace más eficientes, especialmente para conjuntos de datos grandes. Al ser homogéneos (mismo tipo de dato), los arrays de NumPy evitan la sobrecarga de referencias a objetos.

En contraste, las listas son heterogéneas, almacenando referencias a objetos en memoria contigua, mientras que los objetos reales se almacenan en otro lugar. Esta flexibilidad introduce una sobrecarga adicional de memoria al trabajar con datos numéricos.

En resumen, la siguiente tabla compara las listas con los arrays de NumPy:

1. Está desarrollando un programa para gestionar una colección de objetos Sensor (clase personalizada), cada uno con un timestamp (cadena) y una reading (flotante). El conjunto de datos crecerá con el tiempo y se requieren actualizaciones frecuentes de las lecturas individuales de los sensores. ¿Qué estructura de datos sería la mejor opción?

2. Está trabajando con un gran conjunto de datos numéricos para un proyecto de aprendizaje automático. ¿Qué estructura de datos proporcionaría el rendimiento más eficiente para esta tarea?

3. Está analizando datos del mercado de valores, que consisten en valores numéricos (precios) a lo largo del tiempo. Necesita realizar cálculos rápidos, como encontrar el precio promedio y aplicar transformaciones matemáticas a los datos. ¿Qué estructura de datos elegiría?

question mark

Está desarrollando un programa para gestionar una colección de objetos Sensor (clase personalizada), cada uno con un timestamp (cadena) y una reading (flotante). El conjunto de datos crecerá con el tiempo y se requieren actualizaciones frecuentes de las lecturas individuales de los sensores. ¿Qué estructura de datos sería la mejor opción?

Select the correct answer

question mark

Está trabajando con un gran conjunto de datos numéricos para un proyecto de aprendizaje automático. ¿Qué estructura de datos proporcionaría el rendimiento más eficiente para esta tarea?

Select the correct answer

question mark

Está analizando datos del mercado de valores, que consisten en valores numéricos (precios) a lo largo del tiempo. Necesita realizar cálculos rápidos, como encontrar el precio promedio y aplicar transformaciones matemáticas a los datos. ¿Qué estructura de datos elegiría?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 1
some-alt