説明
依存関係とインストール
クイックスタートガイド
受賞歴
PyDMDを引用
参考文献
開発者と貢献者
資金調達
所属
PyDMDは、時変データセットから時空間コヒーレント構造を分析および抽出するために使用されるデータ駆動型手法である動的モード分解 (DMD)用に設計された Python パッケージです。 DMD 分析を実行するための包括的でユーザーフレンドリーなインターフェイスを提供し、さまざまな分野で働く研究者、エンジニア、データ サイエンティストにとって貴重なツールとなっています。
PyDMD を使用すると、ユーザーは複雑な高次元データセットを一貫した空間モードと時間モードのセットに簡単に分解し、基礎となるダイナミクスをキャプチャし、重要な特徴を抽出できます。このパッケージには標準の DMD アルゴリズムと高度なバリエーションの両方が実装されており、ユーザーは特定のニーズに最適な方法を選択できます。これらの拡張機能を使用すると、ノイズの多いデータ、大きなデータセット、制御変数を処理したり、物理構造を強制したりすることができます。
PyDMD は、科学的な Python エコシステムとのシームレスな統合を提供し、NumPy や SciPy などの人気のあるライブラリを活用して、効率的な数値計算とデータ操作を実現します。また、モード再構成、エネルギー スペクトル解析、時間発展プロットなどのさまざまな視覚化ツールも提供します。これらの機能により、ユーザーはシステムの主要なモードを洞察し、重要な機能を特定し、ダイナミクスの時間的進化を理解することができます。
PyDMD は使いやすさとカスタマイズを促進し、直感的な関数名と明確なパラメーターの説明を備えた十分に文書化された API を提供します。パッケージは積極的に保守および更新され、最新の Python バージョンとの互換性が確保され、ユーザーのフィードバックが組み込まれて機能とパフォーマンスが向上します。ソフトウェアの特徴を示すチュートリアルを多数提供しています。このパッケージの可能性を理解するには、以下の例セクションとチュートリアルを参照してください。利用可能なすべてのツールと機能の概要については、以下の図も参照してください。現在進行中の貢献は半透明のボックスで表されます。
PyDMD は PyPI で利用できるため、次のコマンドを使用して最新のリリース バージョンをインストールできます。
> pip インストール pydmd
最新バージョンをインストールするには、次のコマンドを使用してこのリポジトリのクローンを作成します。
> git clone https://github.com/PyDMD/PyDMD
次に、開発モードでパッケージをインストールします。
> pip install -e 。
PyDMDのコア機能はnumpy
とscipy
に依存します。プロット機能を使用するには、 matplotlib
も必要です。
DMD を実行するには、選択した DMD メソッドを実装する PyDMD モジュールを初期化することから始めます。その後、 fit()
メソッドを呼び出して必要なデータを渡すことによって、モデルを適合させることができます。このステップでは DMD アルゴリズムを実行します。その後、ユーザーは結果を視覚化するために PyDMD プロット ツールを使用できます。
from pydmd import DMDfrom pydmd.plotter import Lot_summary# 12 の時空間モードで正確な DMD モデルを構築します。dmd = DMD(svd_rank=12)# DMD モデルを当てはめます。# X = (n, m) 時変スナップショット データの数多の配列.dmd.fit(X)# 重要な時空間の概要をプロットしますmodes.plot_summary(dmd)
必要に応じて、PyDMD モジュールをデータ プリプロセッサでラップすることもできます。これらのラッパーは、データの前処理とデータ再構築の後処理を自動的に行います。
from pydmd import DMDfrom pydmd.preprocessing import zero_mean_preprocessing# データ centering.centered_dmd = zero_mean_preprocessing(DMD(svd_rank=12))centered_dmd.fit(X) を使用して正確な DMD モデルを構築して近似します
ユーザーは、PyDMD を使用して非常に複雑な DMD モデルを構築することもできます。以下は、バギング、固有値制約、およびカスタム変数射影引数を使用してカスタマイズされた最適化 DMD モデルを構築および適合する方法の例です。
from pydmd import BOPDMD# バギング、最適化 DMD (BOP-DMD) モデルを構築します。# 最適化 DMD (バギングなし) の場合は、BOPDMD(svd_rank=12, num_trials=0) を使用します。bopdmd = BOPDMD(svd_rank=12, # Rank of DMD fit.num_trials=100、# バギング試行の数Perform.trial_size=0.5, # トライアルごとにスナップショットの合計数の 50% を使用します。eig_constraints={"imag", "conjugate_pairs"}, # 固有値は虚数ペアと共役ペアである必要があります。varpro_opts_dict={"tol":0.2, " verbose":True}, # 収束許容値を設定し、詳細な更新を使用します。)# BOP-DMD モデル。# X = (n, m) 時変スナップショット データの numpy 配列# t = (m,) データ収集回数の numpy 配列bopdmd.fit(X, t)
PyDMD モジュールと関数は、カスタマイズを追加するためにさまざまな入力によってパラメーター化される場合があるため、通常、新規ユーザーにはドキュメントを参照するだけでなく、より多くの例や情報についてはモジュール固有のチュートリアルを参照することをお勧めします。
また、以下では、シリンダーを通過する平均中心流れのデータに適合した DMD モデルが与えられた場合の、 plot_summary()
関数の呼び出し例を示します。 dmdbook.com/DATA.zip 。この図の生成には、ランク 12 の正確な DMD モデルが使用されました。固有値、モード、およびダイナミクスは、関連性を示すために色分けされています。固有値マーカーのサイズは、時空間モードの振幅または重要性も示します。
プロットツールのドキュメントはここにあります。
from pydmd.plotter import Lot_summaryplot_summary(dmd, # <-- 近似された PyDMD モデル。DMD、BOPDMD などを使用できます。figsize=(12, 7),index_modes=(0, 2, 4),snapshots_shape=(449, 199)、order="F"、mode_cmap="地震"、dynamics_color="k"、flip_continuous_axes=True、max_sval_plot=30、 )
Lot_summary 関数の出力例。
どの DMD 手法が自分に最適であるかわからないユーザーのために、特定の問題タイプまたはデータ セットに基づいて適切な DMD バリアントを選択する方法の概要を示す次のフローチャートを提供します。
DSWeb 2019 コンテストダイナミック システム ソフトウェア チュートリアル(初任者部門) で優勝。優勝者のチュートリアル (PDF 形式) は、チュートリアル フォルダーで読むことができます。
PyDMD を引用する場合は、次の両方の参考文献を引用してください。
デモ、テゼレ、ロッツァ。 PyDMD: Python 動的モード分解。オープンソース ソフトウェアジャーナル、2018 年。[DOI][bibitem]
イチナガ、アンドレウッツィ、デモ、テッツェレ、ラポ、ロッツァ、ブラントン、クッツ。 PyDMD: 堅牢な動的モード分解のための Python パッケージ。 arXiv プレプリント、2024 年。 [arXiv]
DMD アルゴリズムのさまざまなバージョンを実装するには、次の作業に従います。
カッツ、ブラントン、ブラントン、プロクター。動的モード分解: 複雑なシステムのデータ駆動型モデリング。 SIAM 応用数学のその他のタイトル、2016 年。[DOI] [bibitem]。
シュミット。数値データと実験データの動的モード分解。流体力学ジャーナル、2010 年。[DOI][bibitem]
トゥー、ローリー、ルヒテンブルグ、ブラントン、カッツ。動的モード分解について: 理論と応用。計算力学ジャーナル、2014 年。[DOI][bibitem]
シュミット。動的モード分解とそのバリアント。流体力学の年次レビュー、2022 年。[DOI][bibitem]
前方-後方 DMD:ドーソン、ヘマティ、ウィリアムズ、ローリー。動的モード分解におけるセンサーノイズの影響を特徴付け、補正します。流体の実験、2016 年。[DOI] [bibitem]。
合計最小二乗 DMD: Hemati、Rowley、Deem、Cattafesta。ノイズの多いデータセットの適用されたクープマン スペクトル分析のための動的モード分解のバイアスを解除します。理論的および数値流体力学、2017 年。[DOI] [bibitem]。
最適な閉鎖型 DMD: Héas、Herzet。低ランク動的モード分解: 正確で扱いやすいソリューション。非線形科学ジャーナル、2022 年。[DOI] [bibitem]。
亜空間DMD:武石、川原、ヤイリ。確率的クープマン解析のための部分空間動的モード分解。 Physical Review E、2017 年。[DOI] [bibitem]。
物理学に精通した DMD: Baddoo、Herrmann、McKeon、Kutz、Brunton。物理学に基づいた動的モード分解。王立協会会議録 A、2023 年。[DOI] [bibitem]。
最適化された DMD:アカム、クッツ。最適化された動的モード分解のための変数投影法。応用力学システムに関する SIAM ジャーナル、2018 年。[DOI] [bibitem]。
バギング、最適化された DMD: Sashidhar、Kutz。バギング、空間的および時間的不確実性の定量化による堅牢で安定した予測のための最適化された動的モード分解。王立協会会議録 A、2022 年。[DOI] [bibitem]。
DMD とコントロール:プロクター、ブラントン、カッツ。 control を使用した動的モード分解。応用力学システムに関する SIAM ジャーナル、2016 年。[DOI] [bibitem]。
多重解像度 DMD: Kutz、Fu、Brunton。多重解像度の動的モード分解。応用力学システムに関する SIAM ジャーナル、2016 年。[DOI] [bibitem]。
スパース性を促進する DMD: Jovanović、Schmid、Nicholsスパース性を促進する動的モード分解。流体の物理学、2014 年。[DOI] [bibitem]。
圧縮DMD:エリクソン、ブラントン、クッツ。バックグラウンドモデリングのための圧縮動的モード分解。リアルタイム画像処理ジャーナル、2016 年。[DOI] [bibitem]。
ランダム化DMD:エリクソン、マセリン、クッツ、ブラントン。ランダム化された動的モード分解。応用力学システムに関する SIAM ジャーナル、2019 年。[DOI] [bibitem]。
高次DMD:ル・クランシュ、ベガ。高次の動的モード分解。応用力学システムに関するジャーナル、2017 年。[DOI] [bibitem]。
ハボック:ブラントン、ブラントン、プロクター、カイザー、クッツ。断続的に強制される線形システムとしてのカオス。 Nature Communications、2017。[DOI] [bibitem]。
パラメトリック DMD:アンドレウッツィ、デモ、ロッツァ。パラメトリック動的システムの予測のための動的モード分解拡張。応用力学システムに関する SIAM ジャーナル、2023 年。[DOI] [bibitem]。
拡張 DMD:ウィリアムズ、ローリー、ケブレキディス。データ駆動型のクープマンスペクトル分析のためのカーネルベースの手法。 Journal of Computational Dynamics、2015 年。[DOI] [bibitem]。
ランドー:バドゥー、ハーマン、マッケオン、ブラントン。堅牢な動的モード分解のためのカーネル学習: 線形および非線形の曖昧さ回避の最適化。王立協会会議録 A、2022 年。[DOI] [bibitem]。
センタリング付きDMD: Hirsh、Harris、Kutz、Brunton。データをセンタリングすると、動的モード分解が向上します。応用力学システムに関する SIAM ジャーナル、2020 年。[DOI] [bibitem]
ガビッシュ、ドノホ。特異値の最適なハードしきい値は 4/sqrt(3) です。 IEEE 情報理論トランザクション、2014 年。[DOI] [bibitem]。
松本、インディンジャー。増分特異値分解と総最小二乗法を使用した動的モード分解のためのオンザフライ アルゴリズム。 2017. [arXiv] [ビビアイテム]。
PyDMDを使用した科学的研究のリストはここで見つけることができます。
主な開発者は、
PyDMD をサポートしてくださったすべての貢献者に心より感謝いたします。
チームに参加したいですか?プレイを開始する前に、投稿ガイドラインと開発者向けチュートリアルをお読みください。
contrib.rocks で作成されました。
単体テストを実行するにはpytest
使用します。次のコマンドを使用して、PyDMD のローカル クローンをテストするために必要な依存関係をインストールします (リポジトリの相対パスが./PyDMD/
であると仮定します)。
python -m pip install PyDMD/[テスト]
リポジトリのベース ディレクトリで次のコマンドを使用して、テスト スイート全体を実行できます。
Python -m pytest
PyDMD の重要な部分は、人々が資金提供を受けた他のプロジェクトの副産物として、または大学から資金提供を受けた職に就いている人々によって書かれています。おそらく、PyDMD の開発につながったそのようなプロジェクトがたくさんあるでしょう。このご支援に大変感謝しております。
これに加えて、PyDMD はいくつかの専用プロジェクトによってサポートされており、これにより、他の方法では不可能だった拡張機能、ドキュメント、トレーニング、普及に取り組むことが可能になりました。特に、以下の支援源に多大な感謝の意を表します。
H2020 ERC CoG 2015 AROMA-CFD プロジェクト 681447、SISSA mathLab の主任教授 Gianluigi Rozza。
FSE HEaD プロジェクト、削減次数モデリングによる球状弓形状の最適化 (FVG、イタリア)。