Python中的动态时间规整

16 投票
2 回答
31175 浏览
提问于 2025-04-16 15:55

有没有人知道哪个Python库里有DTW的实现?我发现mlpy好像有我需要的功能,但我一直没法正确安装它——现在在等邮件列表的回复,所以我想看看其他的库。

2 个回答

24

我也想说几句。接着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网站上提到的示例问题。

10

我想说的是,我成功地把 RR中的DTWrpy2 结合在一起使用。用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)

撰写回答