Descripción
Dependencias e instalación.
guía de inicio rápido
Premios
Citando a PyDMD
Referencias
Desarrolladores y contribuyentes
Fondos
Afiliaciones
PyDMD es un paquete de Python diseñado para la descomposición en modo dinámico (DMD) , un método basado en datos que se utiliza para analizar y extraer estructuras coherentes espaciotemporales de conjuntos de datos que varían en el tiempo. Proporciona una interfaz completa y fácil de usar para realizar análisis DMD, lo que la convierte en una herramienta valiosa para investigadores, ingenieros y científicos de datos que trabajan en diversos campos.
Con PyDMD, los usuarios pueden descomponer fácilmente conjuntos de datos complejos y de alta dimensión en un conjunto de modos espaciales y temporales coherentes, capturando la dinámica subyacente y extrayendo características importantes. El paquete implementa algoritmos DMD estándar y variaciones avanzadas, lo que permite a los usuarios elegir el método más adecuado para sus necesidades específicas. Estas extensiones permiten tratar con datos ruidosos, grandes conjuntos de datos, variables de control o imponer estructuras físicas.
PyDMD ofrece una integración perfecta con el ecosistema científico de Python, aprovechando bibliotecas populares como NumPy y SciPy para cálculos numéricos y manipulación de datos eficientes. También ofrece una variedad de herramientas de visualización, incluida la reconstrucción de modos, el análisis del espectro de energía y el trazado de la evolución del tiempo. Estas capacidades permiten a los usuarios obtener información sobre los modos dominantes del sistema, identificar características importantes y comprender la evolución temporal de la dinámica.
PyDMD promueve la facilidad de uso y la personalización, proporcionando una API bien documentada con nombres de funciones intuitivos y descripciones claras de los parámetros. El paquete se mantiene y actualiza activamente, lo que garantiza la compatibilidad con las últimas versiones de Python e incorpora comentarios de los usuarios para mejorar la funcionalidad y el rendimiento. Ofrecemos muchos tutoriales que muestran las características del software. Consulte la sección de Ejemplos a continuación y los Tutoriales para tener una idea del potencial de este paquete. Consulte también el diagrama a continuación para obtener un resumen de todas las herramientas y funcionalidades disponibles. Las contribuciones actualmente en curso están representadas por cuadros semitransparentes.
PyDMD está disponible en PyPI, por lo tanto, puede instalar la última versión lanzada con:
> pip instalar pydmd
Para instalar la versión más avanzada, clona este repositorio con:
> clon de git https://github.com/PyDMD/PyDMD
y luego instale el paquete en modo de desarrollo:
> instalación de pip -e.
Las características principales de PyDMD dependen de numpy
y scipy
. Para utilizar las funciones de trazado, también necesitará matplotlib
.
Para realizar DMD, simplemente comience inicializando un módulo PyDMD que implemente el método DMD de su elección. Luego se pueden ajustar los modelos llamando al método fit()
y pasando los datos necesarios. Este paso ejecuta el algoritmo DMD, después del cual los usuarios pueden usar las herramientas de trazado PyDMD para visualizar sus resultados.
from pydmd import DMDfrom pydmd.plotter import plot_summary# Construya un modelo DMD exacto con 12 modos espaciotemporales.dmd = DMD(svd_rank=12)# Ajustar el modelo DMD.# X = (n, m) gran conjunto de datos instantáneos que varían en el tiempo .dmd.fit(X)# Traza un resumen de los modos espaciotemporales clave.plot_summary(dmd)
Los módulos PyDMD también se pueden empaquetar con preprocesadores de datos si se desea. Estos contenedores preprocesarán los datos y posprocesarán las reconstrucciones de datos automáticamente.
from pydmd import DMDfrom pydmd.preprocessing import zero_mean_preprocessing# Construya y ajuste un modelo DMD exacto con data centering.centered_dmd = zero_mean_preprocessing(DMD(svd_rank=12))centered_dmd.fit(X)
Los usuarios también pueden crear modelos DMD altamente complejos con PyDMD. A continuación se muestra un ejemplo de cómo se podría construir y ajustar un modelo DMD optimizado personalizado con ensacado, restricciones de valores propios y argumentos de proyección de variables personalizados.
from pydmd import BOPDMD# Cree un modelo DMD optimizado y ensacado (BOP-DMD).# Para DMD optimizado (sin ensacado), use BOPDMD(svd_rank=12, num_trials=0).bopdmd = BOPDMD(svd_rank=12, # Rango de el DMD fit.num_trials=100, # Número de pruebas de embolsado a perform.trial_size=0.5, # Utilice el 50 % del número total de instantáneas por prueba.eig_constraints={"imag", "conjugate_pairs"}, # Los valores propios deben ser pares imaginarios y conjugados.varpro_opts_dict={"tol":0.2, " verbose":True}, # Establece la tolerancia de convergencia y usa actualizaciones detalladas.)# Ajustar el modelo BOP-DMD.# X = (n, m) matriz numerosa de datos instantáneos que varían en el tiempo# t = (m,) matriz numerosa de tiempos de recopilación de datosbopdmd.fit(X, t)
Los módulos y funciones de PyDMD se pueden parametrizar mediante una variedad de entradas para una mayor personalización, por lo que generalmente recomendamos que los nuevos usuarios consulten nuestra documentación, así como nuestros tutoriales específicos de módulos para obtener más ejemplos e información.
También se proporciona a continuación una llamada de ejemplo a la función plot_summary()
cuando se le proporciona un modelo DMD ajustado al flujo centrado en la media más allá de los datos de un cilindro disponibles en dmdbook.com/DATA.zip . Se utilizó un modelo DMD exacto de rango 12 para generar esta cifra. Los valores propios, los modos y la dinámica están codificados por colores para indicar asociaciones. Los tamaños de los marcadores de valores propios también indican amplitudes o importancia del modo espaciotemporal.
La documentación de la herramienta de trazado se puede encontrar aquí.
de pydmd.plotter import plot_summaryplot_summary(dmd, # <-- Modelo PyDMD ajustado. Puede ser DMD, BOPDMD, etc.figsize=(12, 7),index_modes=(0, 2, 4),snapshots_shape=(449, 199),order="F",mode_cmap="sísmico",dynamics_color="k",flip_continuous_axes=True,max_sval_plot=30, )
Salida de muestra de la función plot_summary.
Para los usuarios que no están seguros de qué método DMD es mejor para ellos, proporcionamos el siguiente diagrama de flujo, que describe cómo se puede elegir una variante de DMD adecuada en función de tipos de problemas o conjuntos de datos específicos.
Ganador del primer premio en el Concurso DSWeb 2019 Tutoriales sobre Software de Sistemas Dinámicos (Categoría Junior Faculty). Puedes leer el tutorial del ganador (formato PDF) en la carpeta de tutoriales.
Al citar PyDMD, cite las dos referencias siguientes:
Demostración, Tezzele, Rozza. PyDMD: descomposición en modo dinámico de Python . Revista de software de código abierto, 2018. [DOI][bibitem]
Ichinaga, Andreuzzi, Demo, Tezzele, Lapo, Rozza, Brunton, Kutz. PyDMD: un paquete de Python para una descomposición robusta en modo dinámico . Preimpresión de arXiv, 2024. [arXiv]
Para implementar las distintas versiones del algoritmo DMD seguimos estos trabajos:
Kutz, Brunton, Brunton, Proctor. Descomposición en modo dinámico: modelado basado en datos de sistemas complejos . SIAM Otros Títulos en Matemática Aplicada, 2016. [DOI] [bibitem].
Schmid. Descomposición en modo dinámico de datos numéricos y experimentales . Revista de Mecánica de Fluidos, 2010. [DOI][bibitem]
Tu, Rowley, Luchtenburg, Brunton, Kutz. Sobre la descomposición en modo dinámico: teoría y aplicaciones . Revista de dinámica computacional, 2014. [DOI][bibitem]
Schmid. Descomposición en modo dinámico y sus variantes . Revisión anual de mecánica de fluidos, 2022. [DOI][bibitem]
DMD hacia adelante y hacia atrás: Dawson, Hemati, Williams, Rowley. Caracterizar y corregir el efecto del ruido del sensor en la descomposición del modo dinámico . Experimentos en Fluidos, 2016. [DOI] [bibitem].
DMD total de mínimos cuadrados: Hemati, Rowley, Deem, Cattafesta. "Dessesgo de la descomposición del modo dinámico para el análisis espectral de Koopman aplicado de conjuntos de datos ruidosos" . Dinámica de fluidos teórica y computacional, 2017. [DOI] [bibitem].
DMD óptima de forma cerrada: Héas, Herzet. "Descomposición en modo dinámico de bajo rango: una solución exacta y manejable" . Revista de ciencia no lineal, 2022. [DOI] [bibitem].
DMD subespacial: Takeishi, Kawahara, Yairi. "Descomposición del modo dinámico subespacial para análisis estocástico de Koopman" . Revisión física E, 2017. [DOI] [bibitem].
DMD basado en la física: Baddoo, Herrmann, McKeon, Kutz, Brunton. "Descomposición en modo dinámico basada en la física" . Actas de la Royal Society A, 2023. [DOI] [bibitem].
DMD optimizado: Askham, Kutz. "Métodos de proyección variable para una descomposición optimizada en modo dinámico" . Revista SIAM de Sistemas Dinámicos Aplicados, 2018. [DOI] [bibitem].
Ensacado, DMD optimizado: Sashidhar, Kutz. "Ensacado, descomposición optimizada del modo dinámico para un pronóstico sólido y estable con cuantificación de la incertidumbre espacial y temporal" . Actas de la Royal Society A, 2022. [DOI] [bibitem].
DMD con control: Proctor, Brunton, Kutz. Descomposición en modo dinámico con control . Revista SIAM de Sistemas Dinámicos Aplicados, 2016. [DOI] [bibitem].
DMD multiresolución: Kutz, Fu, Brunton. Descomposición en modo dinámico multiresolución . Revista SIAM de Sistemas Dinámicos Aplicados, 2016. [DOI] [bibitem].
DMD que promueve la dispersión: Jovanović, Schmid, Nichols Descomposición en modo dinámico que promueve la dispersión . Física de Fluidos, 2014. [DOI] [bibitem].
DMD comprimido: Erichson, Brunton, Kutz. "Descomposición en modo dinámico comprimido para modelado de fondo" . Revista de procesamiento de imágenes en tiempo real, 2016. [DOI] [bibitem].
DMD aleatorizado: Erichson, Mathelin, Kutz, Brunton. "Descomposición aleatoria en modo dinámico" . Revista SIAM de Sistemas Dinámicos Aplicados, 2019. [DOI] [bibitem].
DMD de orden superior: Le Clainche, Vega. "Descomposición en modo dinámico de orden superior" . Revista de Sistemas Dinámicos Aplicados, 2017. [DOI] [bibitem].
HAVOK: Brunton, Brunton, Proctor, Kaiser, Kutz. El caos como sistema lineal intermitentemente forzado . Comunicaciones de la naturaleza, 2017. [DOI] [bibitem].
DMD paramétrico: Andreuzzi, Demo, Rozza. "Una extensión de descomposición de modo dinámico para el pronóstico de sistemas dinámicos paramétricos" . Revista SIAM de Sistemas Dinámicos Aplicados, 2023. [DOI] [bibitem].
DMD extendido: Williams, Rowley, Kevrekidis. "Un método basado en kernel para el análisis espectral de Koopman basado en datos" . Revista de Dinámica Computacional, 2015. [DOI] [bibitem].
LANDO: Baddoo, Herrmann, McKeon, Brunton. Aprendizaje del kernel para una descomposición robusta en modo dinámico: optimización de desambiguación lineal y no lineal . Actas de la Royal Society A, 2022. [DOI] [bibitem].
DMD con centrado: Hirsh, Harris, Kutz, Brunton. Centrar los datos mejora la descomposición del modo dinámico . Revista SIAM de Sistemas Dinámicos Aplicados, 2020. [DOI] [bibitem]
Gavish, Donoho. El umbral estricto óptimo para valores singulares es 4/sqrt(3) . Transacciones IEEE sobre teoría de la información, 2014. [DOI] [bibitem].
Matsumoto, Indinger. Algoritmo sobre la marcha para la descomposición en modo dinámico utilizando descomposición incremental de valores singulares y mínimos cuadrados totales . 2017. [arXiv] [bibitem].
Puede encontrar una lista de los trabajos científicos que utilizan PyDMD aquí.
Los principales desarrolladores son
¡Agradecemos calurosamente a todos los contribuyentes que han apoyado a PyDMD!
¿Quieres unirte al equipo? ¡Lea las pautas de contribución y los tutoriales para desarrolladores antes de comenzar a jugar!
Hecho con contribuciones.rocks.
Usamos pytest
para ejecutar nuestras pruebas unitarias. Utilice el siguiente comando para instalar las dependencias necesarias para probar un clon local de PyDMD (suponiendo que la ruta relativa del repositorio sea ./PyDMD/
):
python -m pip instalar PyDMD/[prueba]
Puede ejecutar todo el conjunto de pruebas utilizando el siguiente comando en el directorio base del repositorio:
pitón -m pytest
Una parte importante de PyDMD ha sido escrita como subproducto de otros proyectos para los que se financió a personas o por personas que ocupan puestos financiados por la universidad. Probablemente haya muchos de estos proyectos que hayan conducido a algún desarrollo de PyDMD. ¡Estamos muy agradecidos por este apoyo!
Más allá de esto, PyDMD también ha contado con el apoyo de algunos proyectos dedicados que nos han permitido trabajar en extensiones, documentación, capacitación y difusión que de otro modo no hubieran sido posibles. En particular, reconocemos con gran gratitud las siguientes fuentes de apoyo:
H2020 ERC CoG 2015 Proyecto AROMA-CFD 681447, profesor PI Gianluigi Rozza en SISSA mathLab.
Proyecto FSE HEaD Optimización de la forma del arco bulboso mediante modelado de orden reducido, FVG, Italia.