编程语言
首页 > 编程语言> > Python中的多维/多变量动态时间规整(DTW)库/代码

Python中的多维/多变量动态时间规整(DTW)库/代码

作者:互联网

我正在研究时间序列数据.可用数据是多变量的.因此,对于每个时间实例,有三个数据点可用.
格式:

| X | Y | Z |

因此,将实时生成上述格式的一个时间序列数据.我试图在另一个时间序列基础数据中找到这个实时生成的时间序列的良好匹配,该数据已经存储(其大小更大并且以不同的频率收集).如果我将标准DTW分别应用于每个系列(X,Y,Z),它们最终可能会在基础数据库中的不同点获得匹配,这是不利的.所以我需要在基础数据库中找到一个点,其中所有三个组件(X,Y,Z)匹配良好并且在同一点上.

我已经研究过这个问题,发现多维DTW是解决这个问题的完美解决方案.在R中,dtw包确实包含多维DTW,但我必须在Python中实现它. R-Python桥接包即“rpy2”在这里可能有所帮助,但我没有R的经验.我已经查看了Python中可用的DTW包,如mlpy,dtw但没有帮助.任何人都可以使用rpy2建议Python中的包使用相同的方法或使用多维DTW的代码.

提前致谢!

解决方法:

谢谢@lgautier我深入挖掘并发现在Python中使用rpy2实现多变量DTW.只是将模板和查询作为2D矩阵(如R中的矩阵)传递,将允许rpy2 dtw包执行多变量DTW.此外,如果您安装了R,则加载R dtw库和“?dtw”将可以访问库的文档以及库中可用的不同功能.

以供将来参考具有类似问题的其他用户:
R dtw包的官方文档:https://cran.r-project.org/web/packages/dtw/dtw.pdf
示例代码,为多变量DTW传递两个二维矩阵,open_begin和open_end参数启用子序列匹配:

import numpy as np
import rpy2.robjects.numpy2ri
rpy2.robjects.numpy2ri.activate()
from rpy2.robjects.packages import importr
import rpy2.robjects as robj

R = rpy2.robjects.r
DTW = importr('dtw')

# Generate our data
template = np.array([[1,2,3,4,5],[1,2,3,4,5]]).transpose()
rt,ct = template.shape
query = np.array([[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]]).transpose()
rq,cq = query.shape

#converting numpy matrices to R matrices
templateR=R.matrix(template,nrow=rt,ncol=ct)
queryR=R.matrix(query,nrow=rq,ncol=cq)

# Calculate the alignment vector and corresponding distance
alignment = R.dtw(templateR,queryR,keep=True, step_pattern=R.rabinerJuangStepPattern(4,"c"),open_begin=True,open_end=True)

dist = alignment.rx('distance')[0][0]

print dist

标签:python,pattern-matching,time-series,dynamic-programming,rpy2
来源: https://codeday.me/bug/20190611/1219687.html