Beschreibung
Abhängigkeiten und Installation
Schnellstartanleitung
Auszeichnungen
Unter Berufung auf PyDMD
Referenzen
Entwickler und Mitwirkende
Finanzierung
Zugehörigkeiten
PyDMD ist ein Python-Paket, das für Dynamic Mode Decomposition (DMD) entwickelt wurde, eine datengesteuerte Methode zur Analyse und Extraktion räumlich-zeitlicher kohärenter Strukturen aus zeitlich variierenden Datensätzen. Es bietet eine umfassende und benutzerfreundliche Schnittstelle zur Durchführung von DMD-Analysen und ist damit ein wertvolles Werkzeug für Forscher, Ingenieure und Datenwissenschaftler, die in verschiedenen Bereichen arbeiten.
Mit PyDMD können Benutzer komplexe, hochdimensionale Datensätze problemlos in eine Reihe kohärenter räumlicher und zeitlicher Modi zerlegen, die zugrunde liegende Dynamik erfassen und wichtige Merkmale extrahieren. Das Paket implementiert sowohl Standard-DMD-Algorithmen als auch erweiterte Varianten, sodass Benutzer die für ihre spezifischen Anforderungen am besten geeignete Methode auswählen können. Diese Erweiterungen ermöglichen den Umgang mit verrauschten Daten, großen Datensätzen, Kontrollvariablen oder die Einführung physikalischer Strukturen.
PyDMD bietet eine nahtlose Integration in das wissenschaftliche Python-Ökosystem und nutzt beliebte Bibliotheken wie NumPy und SciPy für effiziente numerische Berechnungen und Datenmanipulation. Es bietet außerdem eine Vielzahl von Visualisierungstools, darunter Modenrekonstruktion, Energiespektrumanalyse und Darstellung der Zeitentwicklung. Diese Funktionen ermöglichen es Benutzern, Einblicke in die vorherrschenden Modi des Systems zu gewinnen, wichtige Merkmale zu identifizieren und die zeitliche Entwicklung der Dynamik zu verstehen.
PyDMD fördert die Benutzerfreundlichkeit und Anpassung und bietet eine gut dokumentierte API mit intuitiven Funktionsnamen und klaren Parameterbeschreibungen. Das Paket wird aktiv gepflegt und aktualisiert, um die Kompatibilität mit den neuesten Python-Versionen sicherzustellen und Benutzerfeedback zu berücksichtigen, um Funktionalität und Leistung zu verbessern. Wir stellen viele Tutorials zur Verfügung, die die Eigenschaften der Software zeigen. Sehen Sie sich den Abschnitt „Beispiele“ unten und die Tutorials an, um eine Vorstellung vom Potenzial dieses Pakets zu bekommen. Sehen Sie sich auch das Diagramm unten an, um eine Zusammenfassung aller verfügbaren Tools und Funktionen zu erhalten. Derzeit laufende Beiträge werden durch halbtransparente Kästchen dargestellt.
PyDMD ist auf PyPI verfügbar, daher können Sie die neueste veröffentlichte Version installieren mit:
> pip install pydmd
Um die neueste Version zu installieren, klonen Sie dieses Repository mit:
> Git-Klon https://github.com/PyDMD/PyDMD
und installieren Sie dann das Paket im Entwicklungsmodus:
> pip install -e .
Die Kernfunktionen von PyDMD hängen von numpy
und scipy
ab. Um die Plotfunktionen nutzen zu können, benötigen Sie außerdem matplotlib
.
Um DMD durchzuführen, initialisieren Sie einfach zunächst ein PyDMD-Modul, das die DMD-Methode Ihrer Wahl implementiert. Modelle können dann angepasst werden, indem die Methode fit()
aufgerufen und die erforderlichen Daten übergeben werden. In diesem Schritt wird der DMD-Algorithmus ausgeführt. Anschließend können Benutzer PyDMD-Plottools verwenden, um ihre Ergebnisse zu visualisieren.
from pydmd import DMDfrom pydmd.plotter import plot_summary# Erstellen Sie ein exaktes DMD-Modell mit 12 räumlich-zeitlichen Modi.dmd = DMD(svd_rank=12)# Passen Sie das DMD-Modell an.# X = (n, m) Numpy-Array zeitlich variierender Snapshot-Daten .dmd.fit(X)# Zeichnen Sie eine Zusammenfassung der wichtigsten räumlich-zeitlichen Elemente models.plot_summary(dmd)
PyDMD-Module können bei Bedarf auch mit Datenpräprozessoren umschlossen werden. Diese Wrapper verarbeiten die Daten automatisch vor und verarbeiten Datenrekonstruktionen automatisch nach.
from pydmd import DMDfrom pydmd.preprocessing import zero_mean_preprocessing# Erstellen und passen Sie ein genaues DMD-Modell mit Daten an centering.centered_dmd = zero_mean_preprocessing(DMD(svd_rank=12))centered_dmd.fit(X)
Benutzer können mit PyDMD auch hochkomplexe DMD-Modelle erstellen. Nachfolgend finden Sie ein Beispiel dafür, wie man ein benutzerdefiniertes optimiertes DMD-Modell mit Bagging, Eigenwertbeschränkungen und benutzerdefinierten Variablenprojektionsargumenten erstellen und anpassen kann.
from pydmd import BOPDMD# Erstellen Sie ein Bagging, Optimized DMD (BOP-DMD)-Modell.# Für optimiertes DMD (ohne Bagging) verwenden Sie BOPDMD(svd_rank=12, num_trials=0).bopdmd = BOPDMD(svd_rank=12, # Rang von die DMD fit.num_trials=100, # Anzahl der Absackversuche bis perform.trial_size=0.5, # 50 % der Gesamtzahl der Schnappschüsse pro Versuch verwenden.eig_constraints={"imag", "conjugate_pairs"}, # Eigenwerte müssen imaginär sein und Paare konjugieren.varpro_opts_dict={"tol":0.2, " verbose":True}, # Konvergenztoleranz festlegen und ausführliche Aktualisierungen verwenden.)# BOP-DMD anpassen model.#
PyDMD-Module und -Funktionen können für zusätzliche Anpassungen durch eine Vielzahl von Eingaben parametrisiert werden. Daher empfehlen wir neuen Benutzern generell, sich für weitere Beispiele und Informationen unsere Dokumentation sowie unsere modulspezifischen Tutorials anzusehen.
Unten finden Sie außerdem einen Beispielaufruf der Funktion plot_summary()
bei einem DMD-Modell, das an die mittelzentrierte Strömung an einem Zylinder vorbei angepasst ist. Daten sind verfügbar unter dmdbook.com/DATA.zip . Zur Generierung dieser Zahl wurde ein exaktes DMD-Modell mit Rang 12 verwendet. Eigenwerte, Modi und Dynamik sind farblich gekennzeichnet, um Zusammenhänge anzuzeigen. Die Größe der Eigenwertmarker zeigt auch die Amplituden oder Bedeutung des raumzeitlichen Modus an.
Die Dokumentation zum Plottool finden Sie hier.
aus pydmd.plotter import plot_summaryplot_summary(dmd, # <-- Angepasstes PyDMD-Modell. Kann DMD, BOPDMD usw. sein.figsize=(12, 7),index_modes=(0, 2, 4),snapshots_shape=(449, 199),order="F",mode_cmap="seismic",dynamics_color="k",flip_continuous_axes=True,max_sval_plot=30, )
Beispielausgabe der Funktion plot_summary.
Für Benutzer, die sich nicht sicher sind, welche DMD-Methode für sie am besten geeignet ist, stellen wir das folgende Flussdiagramm zur Verfügung, das zeigt, wie man basierend auf bestimmten Problemtypen oder Datensätzen eine geeignete DMD-Variante auswählen kann.
Gewinner des ersten Preises bei den DSWeb 2019-Wettbewerbs -Tutorials zu Dynamical Systems Software (Kategorie „Junior Faculty“). Sie können das Gewinner-Tutorial (PDF-Format) im Tutorials-Ordner lesen.
Wenn Sie PyDMD zitieren, geben Sie bitte die beiden folgenden Referenzen an:
Demo, Tezzele, Rozza. PyDMD: Python Dynamic Mode Decomposition . Journal of Open Source Software, 2018. [DOI][bibitem]
Ichinaga, Andreuzzi, Demo, Tezzele, Lapo, Rozza, Brunton, Kutz. PyDMD: Ein Python-Paket für die robuste dynamische Moduszerlegung . arXiv-Vorabdruck, 2024. [arXiv]
Um die verschiedenen Versionen des DMD-Algorithmus zu implementieren, folgen wir diesen Arbeiten:
Kutz, Brunton, Brunton, Proctor. Dynamische Modenzerlegung: Datengesteuerte Modellierung komplexer Systeme . SIAM Other Titles in Applied Mathematics, 2016. [DOI] [bibitem].
Schmid. Dynamische Modenzerlegung numerischer und experimenteller Daten . Journal of Fluid Mechanics, 2010. [DOI][bibitem]
Tu, Rowley, Luchtenburg, Brunton, Kutz. Zur dynamischen Moduszerlegung: Theorie und Anwendungen . Journal of Computational Dynamics, 2014. [DOI][bibitem]
Schmid. Dynamische Modenzerlegung und ihre Varianten . Jahresrückblick zur Strömungsmechanik, 2022. [DOI][bibitem]
Vorwärts-Rückwärts-DMD: Dawson, Hemati, Williams, Rowley. Charakterisierung und Korrektur des Effekts des Sensorrauschens bei der Zerlegung des dynamischen Modus . Experimente in Flüssigkeiten, 2016. [DOI] [bibitem].
DMD der kleinsten Quadrate insgesamt: Hemati, Rowley, Deem, Cattafesta. Entzerrung der dynamischen Modenzerlegung für die angewandte Koopman-Spektralanalyse verrauschter Datensätze . Theoretical and Computational Fluid Dynamics, 2017. [DOI] [bibitem].
Optimale DMD in geschlossener Form: Héas, Herzet. Zerlegung dynamischer Moden mit niedrigem Rang: Eine genaue und handhabbare Lösung . Journal of Nonlinear Science, 2022. [DOI] [bibitem].
Subraum-DMD: Takeishi, Kawahara, Yairi. Zerlegung dynamischer Subraummoden für die stochastische Koopman-Analyse . Physical Review E, 2017. [DOI] [bibitem].
Physikinformierter DMD: Baddoo, Herrmann, McKeon, Kutz, Brunton. Physikinformierte dynamische Modenzerlegung . Proceedings of the Royal Society A, 2023. [DOI] [bibitem].
Optimiertes DMD: Askham, Kutz. Variable Projektionsmethoden für eine optimierte dynamische Modenzerlegung . SIAM Journal on Applied Dynamical Systems, 2018. [DOI] [bibitem].
Absacken, optimiertes DMD: Sashidhar, Kutz. Bagging, optimierte dynamische Modenzerlegung für robuste, stabile Vorhersagen mit räumlicher und zeitlicher Unsicherheitsquantifizierung . Proceedings of the Royal Society A, 2022. [DOI] [bibitem].
DMD mit Kontrolle: Proctor, Brunton, Kutz. Dynamische Moduszerlegung mit Kontrolle . SIAM Journal on Applied Dynamical Systems, 2016. [DOI] [bibitem].
DMD mit mehreren Auflösungen: Kutz, Fu, Brunton. Zerlegung dynamischer Modi mit mehreren Auflösungen . SIAM Journal on Applied Dynamical Systems, 2016. [DOI] [bibitem].
Sparsity-fördernde DMD: Jovanović, Schmid, Nichols Sparsity-fördernde dynamische Modenzerlegung . Physik der Flüssigkeiten, 2014. [DOI] [bibitem].
Komprimiertes DMD: Erichson, Brunton, Kutz. Komprimierte dynamische Moduszerlegung für die Hintergrundmodellierung . Journal of Real-Time Image Processing, 2016. [DOI] [bibitem].
Randomisierte DMD: Erichson, Mathelin, Kutz, Brunton. Randomisierte dynamische Moduszerlegung . SIAM Journal on Applied Dynamical Systems, 2019. [DOI] [bibitem].
DMD höherer Ordnung: Le Clainche, Vega. Dynamische Modenzerlegung höherer Ordnung . Journal on Applied Dynamical Systems, 2017. [DOI] [bibitem].
HAVOK: Brunton, Brunton, Proctor, Kaiser, Kutz. Chaos als intermittierend erzwungenes lineares System . Nature Communications, 2017. [DOI] [bibitem].
Parametrisches DMD: Andreuzzi, Demo, Rozza. Eine Erweiterung der dynamischen Modenzerlegung für die Vorhersage parametrischer dynamischer Systeme . SIAM Journal on Applied Dynamical Systems, 2023. [DOI] [bibitem].
Erweiterte DMD: Williams, Rowley, Kevrekidis. Eine Kernel-basierte Methode zur datengesteuerten Koopman-Spektralanalyse . Journal of Computational Dynamics, 2015. [DOI] [bibitem].
LANDO: Baddoo, Herrmann, McKeon, Brunton. Kernel-Lernen für robuste dynamische Modenzerlegung: lineare und nichtlineare Disambiguierungsoptimierung . Proceedings of the Royal Society A, 2022. [DOI] [bibitem].
DMD mit Zentrierung: Hirsh, Harris, Kutz, Brunton. Durch die Zentrierung der Daten wird die Zerlegung des dynamischen Modus verbessert . SIAM Journal on Applied Dynamical Systems, 2020. [DOI] [bibitem]
Gavish, Donoho. Der optimale harte Schwellenwert für singuläre Werte ist 4/sqrt(3) . IEEE Transactions on Information Theory, 2014. [DOI] [bibitem].
Matsumoto, Indinger. On-the-fly-Algorithmus für die Zerlegung im dynamischen Modus unter Verwendung der inkrementellen Singulärwertzerlegung und der Gesamtsumme der kleinsten Quadrate . 2017. [arXiv] [bibitem].
Eine Liste der wissenschaftlichen Arbeiten, die PyDMD verwenden, finden Sie hier.
Die Hauptentwickler sind
Wir danken allen Mitwirkenden, die PyDMD unterstützt haben, herzlich!
Möchten Sie dem Team beitreten? Lesen Sie die Beitragsrichtlinien und die Tutorials für Entwickler, bevor Sie mit dem Spielen beginnen!
Hergestellt mit contrib.rocks.
Wir verwenden pytest
um unsere Unit-Tests durchzuführen. Verwenden Sie den folgenden Befehl, um die Abhängigkeiten zu installieren, die zum Testen eines lokalen Klons von PyDMD erforderlich sind (vorausgesetzt, der relative Pfad des Repositorys ist ./PyDMD/
):
python -m pip install PyDMD/[test]
Sie können die gesamte Testsuite ausführen, indem Sie den folgenden Befehl im Basisverzeichnis des Repositorys verwenden:
python -m pytest
Ein erheblicher Teil von PyDMD wurde entweder als Nebenprodukt für andere Projekte geschrieben, für die Menschen finanziert wurden, oder von Leuten in universitätsfinanzierten Positionen. Es gibt wahrscheinlich viele solcher Projekte, die zu einer gewissen Entwicklung von PyDMD geführt haben. Für diese Unterstützung sind wir sehr dankbar!
Darüber hinaus wurde PyDMD auch durch einige spezielle Projekte unterstützt, die es uns ermöglichten, an Erweiterungen, Dokumentation, Schulung und Verbreitung zu arbeiten, die sonst nicht möglich gewesen wären. Wir danken insbesondere den folgenden Quellen der Unterstützung:
H2020 ERC CoG 2015 AROMA-CFD-Projekt 681447, PI-Professor Gianluigi Rozza am SISSA mathLab.
FSE HEaD-Projekt Bulbous Bow Shape Optimization through Reduced Order Modelling, FVG, Italien.