Librería Numpy
- Guillermo Quispe Aroste
- 16 dic 2023
- 5 Min. de lectura
Profesor: Carlos Alberto Janjachi Toribio.
Experiencia
Jefe Monitoreo y Supervisión de Proyectos de Inversión
Poder Judicial del Perú
Docente
Universidad Nacional de Ingeniería de Perú
Docente Posgrado
Universidad Ricardo Palma
Coordinador
Ministerio de Economía y Finanzas del Perú · Jornada completa
Oficina de Normalización Previsional
- Gestor de Aplicaciones y Soluciones de TI
- Arquitecto de Datos y Procesos de Negocios
- Gestor de Sistemas
Educación
Universidad ESAN
Maestría en Dirección de Tecnologías de la Información, Administración.
Escuela de Dirección de la Universidad de Piura
Programa de Desarrollo Directivo
La Salle BCN
Maestría en Gerencia de Tecnologías de la Información
Universidad Nacional de Ingeniería
Ingeniero de Sistemas.
¿Qué es NumPy?
NumPy, que significa "Numerical Python", es una biblioteca de programación en Python diseñada para facilitar operaciones numéricas eficientes. Proporciona estructuras de datos de matriz multidimensional, junto con funciones para realizar operaciones matemáticas y lógicas en estos datos. NumPy es esencial en el ámbito de la computación científica, análisis de datos y aprendizaje automático debido a su capacidad para manejar grandes conjuntos de datos y realizar cálculos de manera eficiente.
Lo distintivo de NumPy radica en su capacidad para realizar operaciones vectorizadas, lo que significa que las operaciones se aplican de manera simultánea a todos los elementos de un arreglo, evitando la necesidad de bucles explícitos y mejorando significativamente la eficiencia computacional. Además, la biblioteca proporciona una amplia variedad de funciones matemáticas y estadísticas, así como técnicas avanzadas de indexación y selección que permiten un acceso y manipulación precisos de los datos.
NumPy también destaca por su capacidad de broadcasting, una funcionalidad que facilita la realización de operaciones entre arreglos de diferentes formas y tamaños de manera automática, lo que simplifica y acelera el proceso de cálculos complejos. En resumen, NumPy se ha convertido en una piedra angular en la programación científica con Python, proporcionando una base robusta y eficiente para la manipulación de datos numéricos en una amplia gama de disciplinas, desde la física y la ingeniería hasta la bioinformática y más allá.
Ventajas de la librería
NumPy presenta una serie de ventajas clave que lo convierten en una herramienta esencial en el ámbito de la programación científica y el análisis de datos. En primer lugar, la capacidad de NumPy para trabajar con arreglos numéricos multidimensionales proporciona una estructura de datos eficiente que facilita la representación y manipulación de datos complejos. Esta característica es fundamental para tareas que involucran grandes conjuntos de datos, como la simulación numérica y el procesamiento de señales.
Otra ventaja significativa de NumPy es su capacidad para realizar operaciones vectorizadas. Esta funcionalidad permite realizar cálculos y operaciones matemáticas de manera simultánea en todos los elementos de un arreglo, evitando la necesidad de bucles explícitos. Como resultado, las operaciones se ejecutan de manera más rápida y eficiente, lo que es crucial en aplicaciones que requieren un rendimiento óptimo, como el aprendizaje automático y la simulación numérica avanzada.
La extensa colección de funciones matemáticas y estadísticas integradas en NumPy es otra ventaja destacada. Desde funciones básicas como suma y promedio hasta operaciones más avanzadas como transformadas y descomposiciones, NumPy proporciona herramientas sólidas para realizar análisis de datos complejos y cálculos científicos de manera eficaz.
La capacidad de NumPy para realizar operaciones de broadcasting es otra ventaja que simplifica la escritura de código y mejora la legibilidad. El broadcasting permite realizar operaciones entre arreglos de diferentes formas y tamaños de manera automática, eliminando la necesidad de ajustes manuales y mejorando la flexibilidad del código.
La capacidad de realizar operaciones vectorizadas es otra ventaja significativa de NumPy. Esto significa que las operaciones se aplican simultáneamente a todos los elementos de un arreglo, eliminando la necesidad de bucles explícitos y mejorando la eficiencia computacional. En entornos que requieren un rendimiento óptimo, como el aprendizaje automático y la simulación numérica avanzada, esta característica es crucial.
NumPy también se destaca por su amplia colección de funciones matemáticas y estadísticas integradas. Desde operaciones básicas como la suma y el promedio hasta funciones más avanzadas como transformadas y descomposiciones, NumPy proporciona herramientas sólidas para realizar análisis de datos complejos y cálculos científicos de manera eficiente.
Un ejemplo de la librería
import numpy as np
# Definir datos de la cadena de suministro
almacenes = ['Almacén A', 'Almacén B', 'Almacén C']
proveedores = ['Proveedor 1', 'Proveedor 2', 'Proveedor 3', 'Proveedor 4']
productos = ['Producto 1', 'Producto 2', 'Producto 3']
# Capacidades y costos de almacenamiento por almacén
capacidades_almacenes = {'Almacén A': 1000, 'Almacén B': 800, 'Almacén C': 1200}
costos_almacenamiento = {'Almacén A': 0.1, 'Almacén B': 0.15, 'Almacén C': 0.08}
# Costos de adquisición y tiempos de entrega por proveedor y producto
costos_adquisicion = np.array([
[5, 6, 8],
[7, 4, 6],
[6, 9, 5],
[8, 5, 7]
])
tiempos_entrega = np.array([
[2, 3, 1],
[1, 2, 2],
[3, 1, 3],
[2, 2, 1]
])
# Demanda mensual de productos por almacén
demanda_mensual = np.array([
[150, 100, 200],
[100, 120, 150],
[200, 150, 100]
])
# Restricciones de capacidad y presupuesto
presupuesto_adquisicion = 10000
capacidad_total_almacenes = sum(capacidades_almacenes.values())
# Función de optimización para asignación de productos a proveedores
def optimizar_asignacion(costos_adquisicion, tiempos_entrega, demanda_mensual):
costos = costos_adquisicion * tiempos_entrega
indices_filas, indices_columnas = np.unravel_index(costos.argmin(), costos.shape)
asignaciones_optimas = np.zeros_like(costos_adquisicion)
asignaciones_optimas[indices_filas, indices_columnas] = demanda_mensual.flatten()[indices_filas]
return asignaciones_optimas
# Optimización de asignación de productos a proveedores
asignaciones_optimas = optimizar_asignacion(costos_adquisicion, tiempos_entrega, demanda_mensual)
# Cálculo de costos totales de adquisición
costos_totales_adquisicion = np.sum(costos_adquisicion * asignaciones_optimas)
# Distribución de inventarios y cálculo de costos de almacenamiento
inventarios_distribuidos = np.sum(asignaciones_optimas, axis=0)
costos_almacenamiento_total = np.sum(np.array(list(costos_almacenamiento.values())) * inventarios_distribuidos)
# Verificación de restricciones
verificacion_presupuesto = costos_totales_adquisicion <= presupuesto_adquisicion
verificacion_capacidad = inventarios_distribuidos.max() <= capacidad_total_almacenes
# Resultados
print("Asignación Óptima de Productos a Proveedores:")
print(asignaciones_optimas)
print("\nCostos Totales de Adquisición:", costos_totales_adquisicion)
print("Costos Totales de Almacenamiento:", costos_almacenamiento_total)
print("\nVerificación de Restricciones:")
print("Presupuesto:", "Cumple" if verificacion_presupuesto else "No Cumple")
print("Capacidad de Almacenes:", "Cumple" if verificacion_capacidad else "No Cumple")
En este ejemplo de optimización de la cadena de suministro, se observa cómo asignar óptimamente la demanda de productos a proveedores para minimizar los costos totales. La matriz de asignaciones óptimas refleja esta distribución eficiente. Además, se calculan los costos totales de adquisición y almacenamiento para evaluar la eficiencia financiera y operativa de la cadena de suministro.
La verificación de restricciones, tanto de presupuesto como de capacidad de almacenamiento, es esencial para garantizar que la solución óptima sea viable en la práctica. Estos resultados proporcionan información clave para la toma de decisiones, permitiendo a las empresas mejorar la eficiencia, reducir costos y mantener un flujo efectivo de productos a través de la cadena de suministro. La optimización de la cadena de suministro desempeña un papel crucial en la mejora continua de procesos y en la toma de decisiones informadas.
Explicando paso a paso
Definición de Datos:
Se definen listas y diccionarios para representar información clave de la cadena de suministro, como almacenes, proveedores, productos, capacidades de almacenamiento y costos asociados.
Matrices de Costos:
Se utilizan matrices NumPy para representar los costos de adquisición y los tiempos de entrega de productos por proveedor.
Demanda y Restricciones:
Se representan las demandas mensuales de productos por almacén y se establecen restricciones de presupuesto y capacidad.
Función de Optimización:
Se define una función optimizar_asignacion que utiliza funciones de NumPy para realizar la optimización de asignación de productos a proveedores, minimizando los costos totales.
Optimización y Resultados:
Se aplica la función de optimización, y luego se calculan los costos totales de adquisición, se distribuyen los inventarios en los almacenes y se verifican las restricciones.
Resultados y Verificaciones:
Finalmente, se imprimen los resultados, incluidas las asignaciones óptimas de productos, los costos totales y las verificaciones de restricciones.
Querida comunidad,
Concluimos aquí nuestro recorrido por palabras e ideas. Gracias por ser parte de esta travesía. Hasta la próxima aventura literaria. ¡Sigue explorando!
Con cariño, Guillermo
Comentarios