描述
依赖和安装
快速入门指南
奖项
引用 PyDMD
参考
开发者和贡献者
资金
隶属关系
PyDMD是一个专为动态模式分解 (DMD)设计的 Python 包,动态模式分解是一种数据驱动方法,用于从时变数据集中分析和提取时空相干结构。它提供了用于执行 DMD 分析的全面且用户友好的界面,使其成为各个领域的研究人员、工程师和数据科学家的宝贵工具。
使用 PyDMD,用户可以轻松地将复杂的高维数据集分解为一组连贯的空间和时间模式,捕获底层动态并提取重要特征。该软件包实现了标准 DMD 算法和高级变体,使用户能够选择最适合其特定需求的方法。这些扩展允许处理噪声数据、大数据集、控制变量或强加物理结构。
PyDMD 提供与科学 Python 生态系统的无缝集成,利用 NumPy 和 SciPy 等流行库进行高效的数值计算和数据操作。它还提供各种可视化工具,包括模式重建、能谱分析和时间演化绘图。这些功能使用户能够深入了解系统的主要模式、识别重要特征并了解动态的时间演化。
PyDMD 促进了易用性和定制化,提供了文档齐全的 API,具有直观的函数名称和清晰的参数描述。该软件包得到积极维护和更新,确保与最新 Python 版本的兼容性,并结合用户反馈来改进功能和性能。我们提供了许多展示该软件特性的教程。请参阅下面的示例部分和教程以了解该包的潜力。另请参阅下图,了解所有可用工具和功能的摘要。当前正在进行的贡献由半透明框表示。
PyDMD 可在 PyPI 上使用,因此您可以使用以下命令安装最新发布的版本:
> pip 安装 pydmd
要安装前沿版本,请使用以下命令克隆此存储库:
> git 克隆 https://github.com/PyDMD/PyDMD
然后以开发模式安装包:
> pip install -e 。
PyDMD的核心功能依赖于numpy
和scipy
。为了使用绘图功能,您还需要matplotlib
。
要执行 DMD,只需首先初始化实现您选择的 DMD 方法的 PyDMD 模块即可。然后可以通过调用fit()
方法并传入必要的数据来拟合模型。此步骤执行 DMD 算法,之后用户可以使用 PyDMD 绘图工具来可视化其结果。
from pydmd import DMDfrom pydmd.plotter importplot_summary# 构建具有 12 种时空模式的精确 DMD 模型。dmd = DMD(svd_rank=12)# 拟合 DMD 模型。# X = (n, m) 时变快照数据的 numpy 数组.dmd.fit(X)# 绘制关键时空的摘要模式.plot_summary(dmd)
如果需要,PyDMD 模块也可以用数据预处理器包装。这些包装器将自动预处理数据并后处理数据重建。
from pydmd import DMDfrom pydmd.preprocessing import Zero_mean_preprocessing# 使用数据中心构建并拟合精确的 DMD 模型.centered_dmd = Zero_mean_preprocessing(DMD(svd_rank=12))centered_dmd.fit(X)
用户还可以使用 PyDMD 构建高度复杂的 DMD 模型。下面是一个示例,说明如何构建和拟合具有装袋、特征值约束和自定义变量投影参数的自定义优化 DMD 模型。
from pydmd import BOPDMD# 构建 Bagging、Optimized DMD (BOP-DMD) 模型。# 对于 Optimized DMD(无 bagging),使用 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 模块和函数可以通过各种输入进行参数化以添加自定义功能,因此我们通常建议新用户参考我们的文档以及特定于模块的教程以获取更多示例和信息。
下面还提供了一个调用plot_summary()
函数的示例,当给定一个适合经过圆柱的平均中心流的DMD模型时,数据可在dmdbook.com/DATA.zip 。使用 12 级精确 DMD 模型生成此数字。特征值、模态和动态都用颜色编码来指示关联。特征值标记大小还指示时空模式幅度或重要性。
可以在此处找到绘图工具文档。
from pydmd.plotter importplot_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, )
plot_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: Takeishi、Kawahara、Yairi。随机库普曼分析的子空间动态模式分解。物理评论 E,2017。[DOI] [bibitem]。
物理学 DMD: Baddoo、Herrmann、McKeon、Kutz、Brunton。基于物理的动态模式分解。英国皇家学会会议记录 A,2023 年。[DOI] [bibitem]。
优化 DMD: Askham、Kutz。用于优化动态模式分解的变量投影方法。 SIAM 应用动力系统杂志,2018 年。[DOI] [bibitem]。
装袋,优化 DMD: Sashidhar,Kutz。 Bagging、优化动态模式分解,通过空间和时间不确定性量化实现稳健、稳定的预测。英国皇家学会会议记录 A,2022 年。[DOI] [bibitem]。
带控制的 DMD: Proctor、Brunton、Kutz。带控制的动态模式分解。 SIAM 应用动力系统杂志,2016 年。[DOI] [bibitem]。
多分辨率 DMD: Kutz、Fu、Brunton。多分辨率动态模式分解。 SIAM 应用动力系统杂志,2016 年。[DOI] [bibitem]。
稀疏性促进 DMD: Jovanović、Schmid、Nichols稀疏性促进动态模式分解。流体物理学,2014。[DOI] [bibitem]。
压缩 DMD: Erichson、Brunton、Kutz。用于背景建模的压缩动态模式分解。实时图像处理杂志,2016。[DOI][bibitem]。
随机 DMD: Erichson、Mathelin、Kutz、Brunton。随机动态模式分解。 SIAM 应用动力系统杂志,2019 年。[DOI] [bibitem]。
高阶 DMD: Le Clainche、Vega。高阶动态模式分解。应用动力系统杂志,2017。[DOI] [bibitem]。
哈沃克:布伦顿、布伦顿、普罗克托、凯撒、库茨。混沌作为间歇性强制线性系统。自然通讯,2017。[DOI][bibitem]。
参数 DMD: Andreuzzi、Demo、Rozza。用于预测参数动力系统的动态模式分解扩展。 SIAM 应用动力系统杂志,2023 年。[DOI] [bibitem]。
扩展 DMD: Williams、Rowley、Kevrekidis。一种基于内核的数据驱动库普曼谱分析方法。计算动力学杂志,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][bibitem]。
您可以在此处找到使用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 的 PI 教授 Gianluigi Rozza。
FSE HEaD 项目通过降阶建模优化球鼻弓形状,FVG,意大利。