설명
종속성 및 설치
빠른 시작 가이드
수상 내역
PyDMD 인용
참고자료
개발자 및 기여자
자금 조달
소속
PyDMD 는 시변 데이터세트에서 시공간적 일관성 구조를 분석하고 추출하는 데 사용되는 데이터 기반 방법인 DMD(동적 모드 분해) 용으로 설계된 Python 패키지입니다. DMD 분석을 수행하기 위한 포괄적이고 사용자 친화적인 인터페이스를 제공하므로 다양한 분야에서 일하는 연구원, 엔지니어 및 데이터 과학자에게 유용한 도구입니다.
PyDMD를 사용하면 사용자는 복잡한 고차원 데이터 세트를 일관된 공간 및 시간 모드 세트로 쉽게 분해하여 기본 역학을 포착하고 중요한 특징을 추출할 수 있습니다. 이 패키지는 표준 DMD 알고리즘과 고급 변형을 모두 구현하므로 사용자는 특정 요구 사항에 가장 적합한 방법을 선택할 수 있습니다. 이러한 확장을 사용하면 시끄러운 데이터, 대규모 데이터 세트, 제어 변수를 처리하거나 물리적 구조를 적용할 수 있습니다.
PyDMD는 효율적인 수치 계산 및 데이터 조작을 위해 NumPy 및 SciPy와 같은 인기 있는 라이브러리를 활용하여 과학 Python 생태계와의 원활한 통합을 제공합니다. 또한 모드 재구성, 에너지 스펙트럼 분석, 시간 전개 플로팅을 포함한 다양한 시각화 도구를 제공합니다. 이러한 기능을 통해 사용자는 시스템의 주요 모드에 대한 통찰력을 얻고 중요한 기능을 식별하며 역학의 시간적 변화를 이해할 수 있습니다.
PyDMD는 직관적인 함수 이름과 명확한 매개변수 설명이 포함된 잘 문서화된 API를 제공하여 사용 편의성과 사용자 정의를 촉진합니다. 패키지는 적극적으로 유지 관리 및 업데이트되어 최신 Python 버전과의 호환성을 보장하고 사용자 피드백을 통합하여 기능과 성능을 향상시킵니다. 우리는 소프트웨어의 특성을 보여주는 많은 튜토리얼을 제공합니다. 이 패키지의 잠재력에 대한 아이디어를 얻으려면 아래 예제 섹션과 튜토리얼을 참조하십시오. 또한 사용 가능한 모든 도구와 기능에 대한 요약을 보려면 아래 다이어그램을 참조하세요. 현재 진행 중인 기여는 반투명 상자로 표시됩니다.
PyDMD는 PyPI에서 사용할 수 있으므로 다음을 사용하여 최신 릴리스 버전을 설치할 수 있습니다.
> pip 설치 pydmd
최신 버전을 설치하려면 다음을 사용하여 이 저장소를 복제하세요.
> 자식 클론 https://github.com/PyDMD/PyDMD
그런 다음 개발 모드에서 패키지를 설치하십시오.
> pip 설치 -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# 배깅 최적화 DMD(BOP-DMD) 모델을 구축합니다.# 최적화 DMD(배깅 없음)의 경우 BOPDMD(svd_rank=12, num_trials=0)를 사용합니다.bopdmd = BOPDMD(svd_rank=12, # Rank of the DMD fit.num_trials=100, # 수행할 배깅 시도 횟수.trial_size=0.5, # 시도당 총 스냅샷 수의 50%를 사용합니다.eig_constraints={"imag", "conjugate_pairs"}, # 고유값은 허수여야 합니다. and켤레 쌍.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 importplot_summaryplot_summary(dmd, # <-- 적합한 PyDMD 모델. DMD, BOPDMD 등이 될 수 있습니다.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, )
plot_summary 함수의 샘플 출력입니다.
어떤 DMD 방법이 자신에게 가장 적합한지 잘 모르는 사용자를 위해 특정 문제 유형이나 데이터 세트를 기반으로 적절한 DMD 변형을 선택하는 방법을 간략하게 설명하는 다음 순서도를 제공합니다.
동적 시스템 소프트웨어에 대한 DSWeb 2019 콘테스트 튜토리얼(주니어 교수진 카테고리)에서 1등상을 수상했습니다. 튜토리얼 폴더에서 우승자 튜토리얼(PDF 형식)을 읽을 수 있습니다.
PyDMD를 인용할 때 다음 참고 자료를 모두 인용하세요.
데모, 테젤레, 로자. PyDMD: Python 동적 모드 분해 . 오픈소스 소프트웨어 저널, 2018. [DOI][bibitem]
Ichinaga, Andreuzzi, 데모, Tezzele, Lapo, Rozza, Brunton, Kutz. PyDMD: 강력한 동적 모드 분해를 위한 Python 패키지입니다 . arXiv 사전 인쇄, 2024. [arXiv]
다양한 버전의 DMD 알고리즘을 구현하기 위해 다음 작업을 수행합니다.
쿠츠, 브런턴, 브런턴, 프록터. 동적 모드 분해: 복잡한 시스템의 데이터 기반 모델링 . SIAM 응용 수학의 다른 제목, 2016. [DOI] [bibitem].
Schmid. 수치 및 실험 데이터의 동적 모드 분해 . 유체역학 저널, 2010. [DOI][bibitem]
Tu, Rowley, Luchtenburg, Brunton, Kutz. 동적 모드 분해: 이론 및 응용 . 전산역학저널, 2014. [DOI][bibitem]
Schmid. 동적 모드 분해 및 그 변형 . 유체역학 연례 검토, 2022. [DOI][bibitem]
순방향-역방향 DMD: Dawson, Hemati, Williams, Rowley. 동적 모드 분해에서 센서 잡음의 영향을 특성화하고 수정합니다 . 유체 실험, 2016. [DOI] [bibitem].
총 최소제곱 DMD: Hemati, Rowley, Deem, Cattafesta. 시끄러운 데이터세트에 적용된 Koopman 스펙트럼 분석을 위한 동적 모드 분해의 편향성을 제거합니다 . 이론 및 전산유체역학, 2017. [DOI] [bibitem].
최적의 폐쇄형 DMD: Héas, Herzet. 낮은 순위 동적 모드 분해: 정확하고 다루기 쉬운 솔루션입니다 . 비선형 과학 저널, 2022. [DOI] [bibitem].
부분 공간 DMD: 타케시, 카와하라, 야이리. 확률론적 Koopman 분석을 위한 부분공간 동적 모드 분해 . 물리적 검토 E, 2017. [DOI] [bibitem].
물리학 기반 DMD: Baddoo, Herrmann, McKeon, Kutz, Brunton. 물리학에 기반한 동적 모드 분해 . 왕립학회 회보 A, 2023. [DOI] [bibitem].
최적화된 DMD: Askham, Kutz. 최적화된 동적 모드 분해를 위한 가변 투영 방법 . 응용 역학 시스템에 관한 SIAM 저널, 2018. [DOI] [bibitem].
배깅, 최적화된 DMD: Sashidhar, Kutz. 공간적 및 시간적 불확실성 정량화를 통해 견고하고 안정적인 예측을 위한 배깅, 최적화된 동적 모드 분해 . 왕립학회 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].
HAVOK: 브런턴, 브런턴, 프록터, 카이저, 쿠츠. 간헐적으로 강제되는 선형 시스템으로서의 카오스 . 네이처 커뮤니케이션즈(Nature Communications), 2017. [DOI] [bibitem].
파라메트릭 DMD: Andreuzzi, Demo, Rozza. 파라메트릭 동적 시스템 예측을 위한 동적 모드 분해 확장입니다 . 응용 역학 시스템에 관한 SIAM 저널, 2023. [DOI] [bibitem].
확장 DMD: 윌리엄스, 로울리, 케브레키디스. 데이터 기반 koopman 스펙트럼 분석을 위한 커널 기반 방법 . 전산 역학 저널, 2015. [DOI] [bibitem].
LANDO: Baddoo, Herrmann, McKeon, Brunton. 강력한 동적 모드 분해를 위한 커널 학습: 선형 및 비선형 명확성 최적화 . 왕립학회 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/[테스트]
저장소의 기본 디렉터리에서 다음 명령을 사용하여 전체 테스트 모음을 실행할 수 있습니다.
파이썬 -m pytest
PyDMD의 상당 부분은 사람들이 자금을 지원받은 다른 프로젝트의 부산물로 작성되었거나 대학에서 자금을 지원받는 직위에 있는 사람들에 의해 작성되었습니다. 아마도 PyDMD의 개발을 가져온 그러한 프로젝트가 많이 있을 것입니다. 우리는 이러한 지원에 매우 감사드립니다!
이 외에도 PyDMD는 다른 경우에는 불가능했을 확장, 문서화, 교육 및 보급 작업을 수행할 수 있게 해주는 일부 전용 프로젝트의 지원을 받았습니다. 특히 우리는 다음과 같은 지원 소스에 깊은 감사를 드립니다.
H2020 ERC CoG 2015 AROMA-CFD 프로젝트 681447, SISSA mathLab의 PI 교수 Gianluigi Rozza.
FSE HEaD 프로젝트 축소 차수 모델링을 통한 구근 활 모양 최적화, FVG, 이탈리아.