最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
PyEMD:实践指南
时间:2026-09-11 12:22:02 编辑:袖梨 来源:一聚教程网
如果把PyEMD放进候选清单,不能只看热度;它的定位是经验模态分解(EMD)方法的Python实现。对日常自动化任务来说,输入边界、依赖和失败处理如果不清楚就很难稳定复用往往决定它能否落地,不能只用安装成功来判断。试跑可以从用一项范围明确的真实任务完成最小试跑开始,并把配置时间、输出质量、异常信息和维护痕迹写进验收记录。对愿意先做小范围验证并复查原始文档的团队来说,这个仓库值得继续验证;只求即装即用的人则要先看维护成本。
PyEMD
友情链接
- 在线文档:https://pyemd.readthedocs.org
- 问题跟踪器:https://github.com/laszukdawid/pyemd/issues
- 源代码存储库:https://github.com/laszukdawid/pyemd
简介
经验模式的Python实现 分解(EMD)。该软件包包含多个 EMD 变体和 打算及时交付更多。
最近的变化
- [2025-11 v1.9] 迁移到
uv和nox进行构建和测试 - [2025-11 v1.8] 核心性能提升18% EMD
EMD 变体
- 合奏 EMD (EEMD),
- “完整合奏 EMD” (CEEMDAN)
- 普通 EMD 的不同设置和配置。
- 图像分解(EMD2D & BEMD)(实验性,不支持)
- 即时编译EMD (JitEMD)
PyEMD 允许您对包络线、停止标准使用不同的样条线 和极值插值。
可用样条
- 自然立方(默认)
- 点三次
- 厄米立方
- 秋马
- PChip
- 线性
可用的停止标准
- 柯西收敛(默认)
- 固定迭代次数
- 连续原始IMF的数量
极值检测
- 离散极值(默认)
- 抛物线插值
安装
注意:可下载包名为 emd-signal。
PyPi(推荐)
安装软件包的最快方法是通过 pip。
pip install EMD-signal
或者使用 uv 你可以这样做
uv add emd-signal
#or
# uv pip install EMD-signal
通过这种方式,您可以安装在 PyPi 上托管的 PyEMD 的最新稳定版本。
康达
PyEMD(如 emd-signal)可通过 conda-forge 通道用于 Conda
conda install -c conda-forge emd-signal
来源:https://anaconda.org/conda-forge/emd-signal
从源头
如果您只想使用 EMD 及其变体,安装 PyEMD 的最佳方法是通过 pip。
但是,如果您想要最新版本的 PyEMD,无论如何您可能需要自己下载代码并构建包。
该源是公开可用的,并托管在 GitHub 上。
要下载代码,您可以转到源代码页并单击 Code -> Download ZIP,或使用 git 命令行
git clone https://github.com/laszukdawid/PyEMD
使用命令行从源安装包:
python3 -m pip install .
进入git创建的PyEM目录后。
从源代码安装 PyEMD 的更快方法是在同一命令中使用 pip 和 git 来完成:
python3 -m pip install git+https://github.com/laszukdawid/PyEMD.git
但请注意,这会将其安装在您当前的环境中。如果您正在处理多个项目,或与他人共享资源,我们建议使用 虚拟环境。
如果您想让安装可编辑,请使用 pip 的 -e 标志
示例
更详细的示例包含在 文档 或 在 PyEMD/examples.
EMD
在大多数情况下,默认设置就足够了。只需导入 EMD 并通过
您向实例或 emd() 方法发出的信号。
from PyEMD import EMD
import numpy as np
s = np.random.random(100)
emd = EMD()
IMFs = emd(s)
下图是根据输入生成的: $S(t) = cos(22 pi t^2) + 6t^2$
EEMD
使用 Ensemble EMD (EEMD) 的最简单情况是导入 EEMD 并
将您的信号传递给实例或 eemd() 方法。
Windows:请不要跳过 if __name__ == "__main__" 部分。
from PyEMD import EEMD
import numpy as np
if __name__ == "__main__":
s = np.random.random(100)
eemd = EEMD()
eIMFs = eemd(s)
CEEMDAN
与之前的方法一样,还有一种使用 CEEMDAN 的简单方法。
Windows:请不要跳过 if __name__ == "__main__" 部分。
from PyEMD import CEEMDAN
import numpy as np
if __name__ == "__main__":
s = np.random.random(100)
ceemdan = CEEMDAN()
cIMFs = ceemdan(s)
可视化
该软件包包含一个简单的可视化助手,可以帮助 e.g. 处理时间序列和瞬时频率。
import numpy as np
from PyEMD import EMD, Visualisation
t = np.arange(0, 3, 0.01)
S = np.sin(13*t + 0.2*t**1.4) - np.cos(3*t)
# Extract imfs and residue
# In case of EMD
emd = EMD()
emd.emd(S)
imfs, res = emd.get_imfs_and_residue()
# In general:
#components = EEMD()(S)
#imfs, res = components[:-1], components[-1]
vis = Visualisation()
vis.plot_imfs(imfs=imfs, residue=res, t=t, include_residue=True)
vis.plot_instant_freq(t, imfs=imfs)
vis.show()
实验性的
JitEMD
即时(JIT)编译的EMD是EMD的一个版本,它超出了非常大的信号 或多次重复使用同一个实例。强烈建议用于 Jupyter 笔记本通过修改输入而不是方法本身进行实验。
JIT 的问题是编译发生在第一次执行时,它可以是 相当昂贵。对于小信号,或者只执行一次分解,额外的时间 编译将明显大于分解,从而使其性能降低。
请参阅文档了解更多信息,或参阅 示例 了解如何使用该代码。 这是实验性的,因为它的价值仍然值得怀疑,而且作者(我)并不精通 在 JIT 优化中,因此可能会犯错误。
欢迎任何反馈。如果有兴趣,很乐意改进。有问题请开票 和建议。
要在 PyEMD 中启用 JIT,请使用 jit 选项 i.e 进行安装。
pip install EMD-signal[jit]
EMD2D/BEMD
不幸的是,这是实验性的,我们不能保证输出是有意义的。
最简单的用途是将图像作为单色 numpy 2D 数组传递。样本为
对于其他模块,可以使用实例的默认设置,或者更明确地说,
使用 emd2d() 方法。
from PyEMD.EMD2d import EMD2D #, BEMD
import numpy as np
x, y = np.arange(128), np.arange(128).reshape((-1,1))
img = np.sin(0.1*x)*np.cos(0.2*y)
emd2d = EMD2D() # BEMD() also works
IMFs_2D = emd2d(img)
F.A.Q
为什么EEMD/CEEMDAN这么慢?
不幸的是,这就是他们的本性。他们每次都会多次执行 EMD 并稍微修改版本。添加的噪声可能会导致产生许多极值,从而降低自然三次样条的性能。有关如何处理该问题的一些调整,请参阅文档中的 加速技巧。
相关文章
- xess:实践指南 09-11
- 华夏千秋种田玩法技巧怎么用-食材处理和炒制步骤 09-11
- react-query-devtools:实践指南 09-11
- 烈焰觉醒最强职业哪个好-工具排行和选择建议 09-11
- 华夏千秋武学哪个好-工具排行和选择建议 09-11
- tplink路由器ax3000和ax5400对比(tplink路由器ax3000和ax5400相比较) 09-11