【问题标题】:Dynamic Time Warping in Python [closed]Python中的动态时间规整[关闭]
【发布时间】:2025-12-23 20:10:11
【问题描述】:

有人知道有DTW 实现的python 库吗? mlpy 似乎有我正在寻找的东西,但我似乎无法正确安装它——目前正在等待来自邮件列表的回复,所以我想我会寻找其他库。

【问题讨论】:

  • ldd /bin/delorean libplutonium.1.21.so => /lib/libplutonium.1.21.so
  • 人们认为时间是因果关系的严格进程,但实际上 - 从非线性、非主观的角度来看 - 它更像是一个大球-wobbly timey-wimey,呃,东西。
  • @C. Reed - 这是@flow 的 Dr. Who 的一出戏:P
  • 我为 Python 编写了一个 C 扩展来执行经典动态编程/动态时间扭曲中的中心计算。它的运行速度通常比直接的 Python 版本快 500 倍。请参阅github.com/dpwe/dp_python 处的代码和 ipython 笔记本演示。

标签: python


【解决方案1】:

不得不附和这个。为了跟进 C 的响应,这里有一个更适合与 NumPy 中生成的数据交互的实现。我发现这非常有用,因为我通常在 Python 中生成数据并希望与 R 资源交互。

import numpy as np

import rpy2.robjects.numpy2ri
from rpy2.robjects.packages import importr

rpy2.robjects.numpy2ri.activate()

# Set up our R namespaces
R = rpy2.robjects.r
DTW = importr('dtw')

# Generate our data
idx = np.linspace(0, 2*np.pi, 100)
template = np.cos(idx)
query = np.sin(idx) + np.array(R.runif(100))/10

# Calculate the alignment vector and corresponding distance
alignment = R.dtw(query, template, keep=True)
dist = alignment.rx('distance')[0][0]

print(dist)

请注意,这是DTW site 中所述的示例问题。

【讨论】:

  • 谢谢!我喜欢这种方法的一个原因是 rpy2 似乎与 Python 中的多处理模块配合得非常顺畅。因此,如果您有大量数据要在多核机器上处理,这就是您要走的路!
  • 也许这有关系,我遇到了这个问题*.com/questions/2447454/…
  • 这个方法与Python mlpy.dtw包相比如何?>
  • 在 python 中使用 R 一定很慢。
  • 请注意,最新版本的 rpy 需要添加此行:rpy2.robjects.numpy2ri.activate()
【解决方案2】:

为了记录,我已经能够使用RDTW in Rrpy2 的混搭。在 Python 中使用 R 非常简单,并且大大扩展了 Python 的统计功能。这是一个查找偏移噪声正弦和余弦序列之间距离的示例:

    import rpy2.robjects as robjects
    r = robjects.r
    r('library("dtw")')
    idx = r.seq(0,6.28,len=100)
    template = r.cos(idx)
    query = r.sin(idx)+r('runif(100)/10')
    alignment=r.dtw(query,template,keep=r('TRUE'))
    robjects.globalenv["alignment"] =  alignment
    dist = r('alignment$distance')
    print(dist)

【讨论】: