Ir al contenido

Biblioteca Científica en Python

Biblioteca Científica en Python

SciPy, que significa Python Científico, es una biblioteca de código abierto construida sobre NumPy, otra biblioteca fundamental de Python para el cálculo numérico. SciPy amplía las capacidades de NumPy y proporciona una variedad extensa de módulos y funciones que son esenciales para tareas de cálculo científico a un nivel elevado. SciPy incluye funciones optimizadas que suelen utilizarse en NumPy y ciencia de datos.

Para instalar SciPy, simplemente ejecuta el siguiente comando:

pip install scipy

Una vez que hayas instalado SciPy, puedes importar cualquier módulo de la biblioteca. La colección de módulos de SciPy es un recurso valioso, que ofrece una amplia gama de herramientas diseñadas para distintas aplicaciones y tareas. Vamos a explorar los módulos dentro de SciPy.

Constantes en SciPy

SciPy ofrece una serie de constantes científicas predefinidas que son herramientas útiles, especialmente en tareas de ciencia de datos.

El módulo scipy.constants en SciPy organiza diferentes tipos de números esenciales en grupos fáciles de encontrar. Estos grupos incluyen números relacionados con el funcionamiento del mundo físico (como la velocidad de la luz y la gravedad), propiedades de partículas diminutas (átomos y núcleos), y valores matemáticos importantes (como π y e). Si alguien necesita conocer el valor de la velocidad de la luz o la constante matemática π para un cálculo científico, puede encontrarlos fácilmente sin tener que buscar en otro lugar.

Para acceder a la constante matemática π (pi) utilizando el módulo de constantes:

from scipy import constants  
print(constants.pi)  # Salida: 3.141592653589793

Masa

En el módulo de constantes de SciPy, puedes acceder a varias constantes fundamentales relacionadas con la masa. Estas constantes proporcionan valores para las masas de partículas fundamentales como electrones, protones y neutrones, así como unidades como la unidad de masa atómica y la constante de masa atómica. Son útiles en diversos cálculos científicos, especialmente en física, química, física nuclear y campos relacionados donde se requieren valores de masa precisos.

Aquí hay algunos de los constantes relacionadas con la masa disponibles en el módulo de constantes de SciPy:

from scipy import constants  
print(constants.atomic_mass)             # 1.6605390666e-27  
print(constants.m_u)                     # 1.6605390666e-27  
print(constants.electron_mass)           # 9.1093837015e-31  
print(constants.proton_mass)             # 1.67262192369e-27  
print(constants.neutron_mass)            # 1.67492749804e-27  
print(constants.m_n)                      # 1.67492749804e-27  
print(constants.m_p)                      # 1.67262192369e-27  
print(constants.gram)                     # 0.001  
print(constants.metric_ton)               # 1000.0  
print(constants.grain)                    # 6.479891e-05  
print(constants.lb)                       # 0.45359236999999997  
print(constants.pound)                    # 0.4535923699999999  
print(constants.oz)                       # 0.028349523124999998  
print(constants.ounce)                    # 0.028349523124999998  
print(constants.stone)                    # 6.3502931799999995  
print(constants.long_ton)                 # 1016.0469088  
print(constants.short_ton)                # 907.1847399999999  
print(constants.troy_ounce)               # 0.031103476799999998  
print(constants.troy_pound)               # 0.37324172159999996  
print(constants.carat)                    # 0.0002

Prefijos Métricos (SI)

En el módulo de constantes de SciPy, también puedes encontrar los prefijos Métricos (SI) que representan diversas potencias de 10 utilizadas para denotar múltiplos y submúltiplos decimales de las unidades. Estos prefijos facilitan la representación de cantidades extremadamente grandes o pequeñas en cálculos y mediciones científicas.

from scipy import constants  
print(constants.yotta)    #1e+24  
print(constants.zetta)    #1e+21  
print(constants.exa)      #1e+18  
print(constants.peta)     #1000000000000000.0  
print(constants.tera)     #1000000000000.0  
print(constants.giga)     #1000000000.0  
print(constants.mega)     #1000000.0  
print(constants.kilo)     #1000.0  
print(constants.hecto)    #100.0  
print(constants.deka)     #10.0  
print(constants.deci)     #0.1  
print(constants.centi)    #0.01  
print(constants.milli)    #0.001  
print(constants.micro)    #1e-06  
print(constants.nano)     #1e-09  
print(constants.pico)     #1e-12  
print(constants.femto)    #1e-15  
print(constants.atto)     #1e-18  
print(constants.zepto)    #1e-21

Prefijos Binarios

El módulo de constantes de SciPy incluye Prefijos Binarios, que representan potencias de 2 que son ampliamente utilizados en computación para denotar múltiplos o submúltiplos binarios de bytes. Estos prefijos proporcionan una forma conveniente de expresar capacidades de almacenamiento de datos en el ámbito de la información digital.

from scipy import constants  
print(constants.kibi)    #1024  
print(constants.mebi)    #1048576  
print(constants.gibi)    #1073741824  
print(constants.tebi)    #1099511627776  
print(constants.pebi)    #1125899906842624  
print(constants.exbi)    #1152921504606846976  
print(constants.zebi)    #1180591620717411303424  
print(constants.yobi)    #1208925819614629174706176

Ángulo

SciPy proporciona varias funciones y constantes para trabajar con ángulos en radianes y grados. El módulo de constantes incluye constantes esenciales relacionadas con ángulos como π, que representa π, y constantes de radianes y grados, que son factores de conversión entre radianes y grados.

from scipy import constants  
print(constants.degree)     #0.017453292519943295  
print(constants.arcmin)     #0.0002908882086657216  
print(constants.arcminute)  #0.0002908882086657216  
print(constants.arcsec)     #4.84813681109536e-06  
print(constants.arcsecond)  #4.84813681109536e-06

Tiempo

SciPy proporciona varias constantes para trabajar con el tiempo.

from scipy import constants  
print(constants.minute)      #60.0  
print(constants.hour)        #3600.0  
print(constants.day)         #86400.0  
print(constants.week)        #604800.0  
print(constants.year)        #31536000.0  
print(constants.Julian_year) #31557600.0

Longitud

El módulo de constantes proporciona diversas constantes relacionadas con la longitud, ofreciendo factores de conversión y longitudes fundamentales utilizadas en cálculos científicos. Estas constantes permiten a los usuarios trabajar con diferentes unidades de longitud y realizar conversiones entre ellas.

from scipy import constants  
print(constants.inch)             #0.0254  
print(constants.foot)             #0.30479999999999996  
print(constants.yard)             #0.9143999999999999  
print(constants.mile)             #1609.3439999999998  
print(constants.mil)              #2.5399999999999997e-05  
print(constants.pt)               #0.00035277777777777776  
print(constants.point)            #0.00035277777777777776  
print(constants.survey_foot)      #0.3048006096012192  
print(constants.survey_mile)      #1609.3472186944373  
print(constants.nautical_mile)    #1852.0  
print(constants.fermi)            #1e-15  
print(constants.angstrom)         #1e-10  
print(constants.micron)           #1e-06  
print(constants.au)               #149597870691.0  
print(constants.astronomical_unit) #149597870691.0  
print(constants.light_year)       #9460730472580800.0  
print(constants.parsec)           #3.0856775813057292e+16

Presión

En el módulo de constantes, existen varias constantes relacionadas con la presión. Estas constantes proporcionan factores de conversión entre diferentes unidades de presión y ofrecen valores de presión fundamentales utilizados en cálculos científicos.

from scipy import constants  
print(constants.atm)         #101325.0  
print(constants.atmosphere)  #101325.0  
print(constants.bar)         #100000.0  
print(constants.torr)        #133.32236842105263  
print(constants.mmHg)        #133.32236842105263  
print(constants.psi)         #6894.757293168361

Área

En el módulo de constantes, hay varias constantes relacionadas con el área.

from scipy import constants  
print(constants.hectare) #10000.0  
print(constants.acre)    #4046.8564223999992

Volumen

En el módulo de constantes, hay varias constantes relacionadas con el volumen.

from scipy import constants  
print(constants.liter)            #0.001  
print(constants.litre)            #0.001  
print(constants.gallon)           #0.0037854117839999997  
print(constants.gallon_US)        #0.0037854117839999997  
print(constants.gallon_imp)       #0.00454609  
print(constants.fluid_ounce)      #2.9573529562499998e-05  
print(constants.fluid_ounce_US)   #2.9573529562499998e-05  
print(constants.fluid_ounce_imp)  #2.84130625e-05  
print(constants.barrel)           #0.15898729492799998  
print(constants.bbl)              #0.15898729492799998

Velocidad

En el módulo de constantes de SciPy, también puedes encontrar constantes relacionadas con la velocidad, proporcionando factores de conversión entre diferentes unidades de velocidad y valores esenciales de velocidad utilizados en cálculos científicos.

from scipy import constants  
print(constants.kmh)            #0.2777777777777778  
print(constants.mph)            #0.44703999999999994  
print(constants.mach)           #340.5  
print(constants.speed_of_sound) #340.5  
print(constants.knot)            #0.5144444444444445

Temperatura

SciPy proporciona varias constantes relacionadas con la temperatura.

from scipy import constants  
print(constants.zero_Celsius)      #273.15  
print(constants.degree_Fahrenheit) #0.5555555555555556

Datos Dispersos en SciPy

Los datos dispersos se refieren a conjuntos de datos o matrices que contienen una gran cantidad de elementos cero en relación con el número total de elementos. En el cálculo científico y el análisis de datos, manejar datos dispersos es crucial debido a su prevalencia en varios campos, incluida la inteligencia artificial, simulaciones científicas y análisis de redes.

SciPy incluye un submódulo llamado scipy.sparse que proporciona funcionalidades para trabajar eficientemente con estructuras de datos dispersas. Estas estructuras de datos optimizan el uso de memoria al almacenar solo los elementos no cero junto con sus índices, lo que reduce significativamente los requerimientos de almacenamiento y la carga computacional en comparación con el almacenamiento de matrices densas donde la mayoría de los valores son cero.

SciPy ofrece varios tipos de matrices dispersas, como:

  • CSC (Compressed Sparse Column): Este formato almacena la matriz dispersa por columnas, donde cada columna se representa como tres arreglos unidimensionales: uno para los valores no cero, otro para los índices de fila y otro para los punteros de columna.
  • CSR (Compressed Sparse Row): Similar a CSC, este formato almacena la matriz por filas, lo que la hace más eficiente para operaciones basadas en filas.
  • COO (Coordinate Format): Aquí, la matriz dispersa se representa utilizando tres arreglos que contienen los índices de fila, los índices de columna y los valores de los elementos no cero.
import numpy as np  
from scipy.sparse import csc_matrix  

# Creando una matriz densa  
dense_matrix = np.array([[0, 0, 3], [4, 0, 0], [0, 5, 6]])  

# Convirtiendo la matriz densa a una matriz dispersa CSC  
sparse_matrix_csc = csc_matrix(dense_matrix)  

# Accediendo a los elementos de la matriz dispersa CSC  
print("Matriz dispersa CSC:")  
print(sparse_matrix_csc)  

# Realizando operaciones en la matriz dispersa CSC  
col_sum = sparse_matrix_csc.sum(axis=0)  
print("\nSuma por columnas de la matriz dispersa CSC:")  
print(col_sum)

Datos Espaciales en SciPy

SciPy incluye módulos que proporcionan funcionalidades para trabajar con datos espaciales y realizar varias operaciones espaciales. Los datos espaciales se refieren a información asociada con ubicaciones geográficas o espaciales, que se usa comúnmente en sistemas de información geográfica (SIG), mapeo y análisis de relaciones espaciales.

El módulo scipy.spatial dentro de SciPy ofrece herramientas y algoritmos para manejar y procesar datos espaciales. Proporciona una gama de funcionalidades útiles para la geometría computacional, cálculos de distancias, transformaciones espaciales y cálculos de vecinos más cercanos, entre otros.

Los componentes clave y funcionalidades del módulo scipy.spatial incluyen:

  • Cálculo de Distancias: SciPy ofrece métodos para calcular distancias entre puntos en diferentes dimensiones utilizando diversas métricas como la distancia euclidiana, la distancia de Manhattan, la distancia de Minkowski y más. Esto es particularmente útil en análisis espacial, clustering y tareas de clasificación.
  • Convex Hull Espacial: El módulo proporciona algoritmos para calcular el envoltorio convexo de un conjunto de puntos en el espacio. Los envoltorios convexos son fundamentales para entender la forma y estructura de los puntos de datos espaciales.

Un ejemplo que ilustra el uso de algunas funcionalidades de scipy.spatial:

import numpy as np  
from scipy.spatial.distance import euclidean, cityblock, minkowski  
from scipy.spatial import ConvexHull  

# Ejemplo de cálculo de distancia entre dos puntos   
point1 = (1, 2)  
point2 = (4, 6)  

# Cálculo de distancia euclidiana  
euclidean_dist = euclidean(point1, point2)  
print(euclidean_dist)              # Salida: 5.0  

# Cálculo de distancia de Manhattan  
cityblock_dist = cityblock(point1, point2)  
print(cityblock_dist)              # Salida: 7  

# Cálculo de distancia de Minkowski  
minkowski_dist = minkowski(point1, point2, p=3)  
print(minkowski_dist)             # Salida: 4.497941445275415  

# Cálculo del envoltorio convexo de un conjunto de puntos  
points = np.array([[0, 0], [1, 1], [1, 0], [0, 1]])  
hull = ConvexHull(points)  
print(hull.vertices)             # Salida: [0 2 1 3]

Grafos en SciPy

SciPy incluye funcionalidades para trabajar con grafos y redes a través de su módulo scipy.sparse.csgraph. Proporciona herramientas para crear, manipular y analizar grafos de manera eficiente.

Algunas funcionalidades clave de scipy.sparse.csgraph para trabajar con grafos incluyen:

  1. Algoritmos de Camino Más Corto: Estos incluyen varios algoritmos para calcular los caminos más cortos entre nodos en un grafo. Algoritmos como el algoritmo de Dijkstra, el algoritmo de Floyd-Warshall y el algoritmo de Bellman-Ford están disponibles para encontrar caminos más cortos considerando diferentes escenarios.
  • Algoritmo de Dijkstra: Este algoritmo requiere los siguientes argumentos:
  • return_predecessors: booleano (Verdadero para devolver todo el camino de recorrido, de lo contrario Falso).
  • indices: el índice del elemento, que devolverá todos los caminos que llevan a ese elemento solo.
  • limit: el peso máximo del camino.
   import numpy as np  
   from scipy.sparse.csgraph import dijkstra  
   from scipy.sparse import csr_matrix  

   arr = np.array([  
       [0, 4, 0],  
       [0, 0, 8],  
       [0, 0, 7]])  

   newarr = csr_matrix(arr)  
   print(dijkstra(newarr, return_predecessors=True, indices=0))

Salida:

   (array([0., 1., 2.]), array([-9999, 0, 0], dtype=int32))
  • Algoritmo de Floyd-Warshall
   import numpy as np  
   from scipy.sparse.csgraph import floyd_warshall  
   from scipy.sparse import csr_matrix  

   arr = np.array([  
       [0, 1, 2],  
       [1, 3, 0],  
       [2, 1, 3]  
   ])  

   newarr = csr_matrix(arr)  
   print(floyd_warshall(newarr, return_predecessors=True))

Salida:

   (array([[0., 1., 2.], [1., 0., 3.], [2., 1., 0.]]), 
   array([[-9999,     0,     0], [    1, -9999,     0],[    2,     2, -9999]], dtype=int32))
  • Algoritmo de Bellman-Ford
   import numpy as np  
   from scipy.sparse.csgraph import bellman_ford  
   from scipy.sparse import csr_matrix  

   arr = np.array([  
       [0, -1, 2],  
       [1, 0, 7],  
       [2, 1, 3]  
   ])  

   newarr = csr_matrix(arr)  
   print(bellman_ford(newarr, return_predecessors=True, indices=0))

Salida:

   (array([ 0., -1., 2.]), array([-9999, 0, 0], dtype=int32))
  1. Componentes Conectados: SciPy proporciona funciones para encontrar componentes conectados dentro de un grafo. Esto es esencial para entender la estructura y conectividad de las redes.
   import numpy as np  
   from scipy.sparse.csgraph import connected_components  
   from scipy.sparse import csr_matrix  

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

   newarr = csr_matrix(arr)  
   print(connected_components(newarr))

Salida:

   (1, array([0, 0, 0], dtype=int32))

Interpolación

La interpolación en SciPy se refiere al proceso de estimar valores entre puntos de datos conocidos. Por ejemplo, podríamos interpolar entre los puntos 1 y 2 para obtener los puntos 1.44 y 1.66.

SciPy proporciona varios métodos de interpolación para realizar esta tarea de manera eficiente.

El submódulo scipy.interpolate ofrece una amplia gama de funciones y clases para la interpolación, adaptándose a diferentes tipos de datos y requerimientos. Algunos de los métodos de interpolación comúnmente utilizados disponibles en SciPy incluyen:

  1. Interpolación Lineal (interp1d): Este método construye una función de interpolación lineal entre los puntos de datos, asumiendo una relación lineal entre los puntos consecutivos.
   from scipy.interpolate import interp1d  
   import numpy as np  

   xs = np.array([1,2,3,4,5,6,7,8,9])  
   ys = 2*xs + 1  
   interp_func = interp1d(xs, ys)  
   newarr = interp_func(np.arange(2.1, 3, 0.1))  
   print(newarr)

Salida:

   [5.2 5.4 5.6 5.8 6. 6.2 6.4 6.6 6.8]
  1. Interpolación Spline: La interpolación spline construye polinomios cúbicos por partes entre puntos de datos, asegurando suavidad al mantener la continuidad en la primera y segunda derivadas.
   from scipy.interpolate import UnivariateSpline  
   import numpy as np  

   xs = np.array([1,2,3,4,5,6,7,8,9])  
   ys = xs**2 + np.sin(xs) + 1  
   interp_func = UnivariateSpline(xs, ys)  
   newarr = interp_func(np.arange(2.1, 3, 0.1))  
   print(newarr)

Salida:

   [5.62894853 5.9917962 6.37883473 6.78997537 7.22512936 7.68420794 8.16712235 8.67378384 9.20410364]

Estas son algunas de las funciones importantes proporcionadas por SciPy. SciPy se presenta como una biblioteca robusta y versátil dentro del ecosistema de computación científica de Python, ofreciendo una extensa gama de herramientas y funciones para diversas tareas numéricas y científicas. Con sus poderosas capacidades, SciPy simplifica cálculos complejos y permite a investigadores, científicos y desarrolladores abordar una amplia variedad de problemas científicos de manera eficiente.


Servicios Relacionados

Si estás interesado en implementar SciPy en tu empresa o necesitas formación sobre su uso, podemos ayudarte con todo eso y más. Aquí tienes algunas de nuestras ofertas:

  • Consultoría e implementación de Odoo
  • Desarrollo de módulos personalizados
  • Migración de datos y sistemas
  • Capacitación y formación de usuarios
  • Soporte técnico y mantenimiento
  • Auditoría de sistemas ERP
  • Integración con sistemas existentes

Si deseas más información o necesitas ayuda específica, no dudes en contactarme para una consulta gratuita o agenda una demo personalizada. Estoy aquí para ayudarte a sacar el máximo provecho de tus capacidades tecnológicas.


Biblioteca Científica en Python
Jorge Blanco 16 de febrero de 2026
Compartir esta publicación
Nuestros blogs
Archivar
Panel de Control de CRM para una Gestión de Relaciones con Clientes Eficiente