Python中的动态时间规整
有没有人知道哪个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
我想说的是,我成功地把 R、R中的DTW 和 rpy2 结合在一起使用。用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)