2011-04-17 46 views
10

有谁知道有DTW实现的Python库吗? mlpy似乎有我在找什么,但我似乎无法正确安装它 - 目前正在等待邮件列表的回复,所以我想我会考虑其他库。Python中的动态时间扭曲

+0

ldd/bin/delorean libplutonium.1.21.so => /lib/libplutonium.1.21.so – 2011-04-17 18:18:55

+7

人们认为时间是因果关系的严格演变,但实际上*是来自非线性,主观的观点 - 它更像是一个w w w w的时髦呃,呃东西的大球。 – flow 2011-04-17 18:37:28

+0

@C。里德 - 谁先生? – detly 2011-04-20 07:46:59

回答

18

只好附和这一点。为了跟进C的反应,这里有一个实现更适合与NumPy中生成的数据交互。我发现这样做会更有用,因为通常我使用Python生成数据并希望与R资源进行交互。

import numpy as np 

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

# 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上所述的示例问题。

+0

很好的解决方案,谢谢! – 2011-04-24 05:19:58

+0

谢谢!我喜欢这种方法的一个事情是,似乎rpy2在Python中的多处理模块中顺利运行。因此,如果您想要在多核计算机上处​​理大量数据,那就是要走的路! – 2011-05-01 21:09:51

+3

也许这是相关的,我碰到这个问题http://stackoverflow.com/questions/2447454/converting-python-objects-for-rpy2 – 2012-10-28 19:13:08

7

为了记录,我已经能够使用混搭R,DTW 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)