关于DTW算法

动态时间规整/规划(Dynamic Time Warping, DTW)是一个比较老的算法,大概在1970年左右被提出来,最早用于处理语音方面识别分类的问题。

在这里我主要用python实现了DTW算法

# -*- coding: UTF-8 -*-

from numpy import array, zeros, argmin, inf, equal, ndim

# from scipy.spatial.distance import cdist

from sklearn.metrics.pairwise import manhattan_distances

#在这里我用到的是曼哈顿距离(求绝对值距离)

#如果比较的是二维数组,则用欧几里得距离

s1 = [1, 2, 3, 4, 5, 5, 5, 4]

s2 = [3, 4, 5, 5, 5, 4]

r, c = len(s1), len(s2)

D0 = zeros((r+1,c+1))

D0[0,1:] = inf

D0[1:,0] = inf

D1 = D0[1:,1:]

#浅复制

# print D1

for i in range(r):

for j in range(c):

D1[i,j] = manhattan_distances(s1[i],s2[j])

#生成原始距离矩阵

M = D1.copy()

for i in range(r):

for j in range(c):

D1[i,j] += min(D0[i,j],D0[i,j+1],D0[i+1,j])

#代码核心,动态计算最短距离

i,j = array(D0.shape) - 2

#最短路径

# print i,j

p,q = [i],[j]

while(i>0 or j>0):

tb = argmin((D0[i,j],D0[i,j+1],D0[i+1,j]))

if tb==0 :

i-=1

j-=1

elif tb==1 :

i-=1

else:

j-=1

p.insert(0,i)

q.insert(0,j)

print M

#原始距离矩阵

print zip(p,q)

#匹配路径过程

print D1

#Cost Matrix或者叫累积距离矩阵

print D1[-1,-1]

#序列距离

M:

[[ 2. 3. 4. 4. 4. 3.]

[ 1. 2. 3. 3. 3. 2.]

[ 0. 1. 2. 2. 2. 1.]

[ 1. 0. 1. 1. 1. 0.]

[ 2. 1. 0. 0. 0. 1.]

[ 2. 1. 0. 0. 0. 1.]

[ 2. 1. 0. 0. 0. 1.]

[ 1. 0. 1. 1. 1. 0.]]

path:

[(0, 0), (1, 0), (2, 0), (3, 1), (4, 2), (5, 3), (6, 4), (7, 5)]

D1:

[[ 2. 5. 9. 13. 17. 20.]

[ 3. 4. 7. 10. 13. 15.]

[ 3. 4. 6. 8. 10. 11.]

[ 4. 3. 4. 5. 6. 6.]

[ 6. 4. 3. 3. 3. 4.]

[ 8. 5. 3. 3. 3. 4.]

[ 10. 6. 3. 3. 3. 4.]

[ 11. 6. 4. 4. 4. 3.]]

D1[-1,-1]:

3.0

dtw算法 c语言实现,DTW算法的python实现相关推荐

  1. c语言考试算法,c语言考试常用算法docx.docx

    c语言考试常用算法docx 求1~100的累加和#includevoid main(){inti=1,sum=0;while (i<=100){sum+=i;i++;}printf(" ...

  2. c代码实现 ifft运算_fft算法c语言_matlab fft算法_ifft c语言

    FFT快速算法C程序_工学_高等教育_教育专区.电子信息工程综合课程设计报告书 DSP 课程设计 报告 题学 目: 院: FFT 快速算法 C 程序 计算机与信息工程学院 09 ... fft算法代码 ...

  3. 函数c语言桶排算法,C语言基本排序算法之桶式排序实例

    本文实例讲述了C语言基本排序算法之桶式排序.分享给大家供大家参考,具体如下: 桶式排序是对一个有n个整型元素的数组a[n],其中对任意i,0 <= a[i] <= m的特殊排序算法. 可以 ...

  4. 时钟页面置换算法c语言,clock置换算法例题(改进clock置换算法例题讲解)

    Clock页面置换算法: 6)动态给出页面调用序列并进行调度: 7)输出置换结. C++编程要? 考试用 哪位大侠 帮帮 快点 谢谢了 这很简单啊,要打字太多了.不过网上这类算法举例很少,就看你怎么理 ...

  5. c语言编程实现dsa算法,C语言实现DSA算法(不包括质数生成)

    1.头文件部分 #include #include #include 2.判断大数是不是0或1 参见<C语言实现RSA算法> 3.大数加减乘除幂模 参见<C语言实现RSA算法> ...

  6. 弗洛伊德算法c语言path,Floyd算法(弗洛伊德算法)

    算法描述: Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法.从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按 ...

  7. 用c语言编写银行家算法,C语言实现银行家算法

    <C语言实现银行家算法>由会员分享,可在线阅读,更多相关<C语言实现银行家算法(8页珍藏版)>请在人人文库网上搜索. 1.C语言实现银行家算法(源码.运行结果)一. 源码/* ...

  8. 最佳值换算法c语言,页面置换算法---最佳置换算法(OPT)

    最佳置换算法(OPT) 什么是OPT 最佳置换算法,其所选择的被淘汰的页面将是以后永不使用的,或是在最长(未来)时间内不再被访问的页面.采用最佳置换算法通常可保证最低的缺页率.但是人们目前还无法与之, ...

  9. shuffle算法c语言,C#Shuffle算法(洗牌算法、抽样算法)

    Fisher-Yates Shuffle算法 1.创建一个新的list 2.随机取出当前0-list.Count其中一个数 3.把老list当前随机数位置添加到新list 4.老list删除这个数 5 ...

  10. 格雷码算法c语言实验报告,算法设计与分析实验报告

    本科生实验报告 课程名称:算法设计与分析 实验项目:递归和分治算法 实验地点:计算机系实验楼110 专业课:物联网1601学生.2016002105 学生姓名:于 指导员:郝晓丽 2018年5月4日 ...

最新文章

  1. 内存分配器memblock【转】
  2. Asp.Net Core 入门(一)——Program.cs做了什么
  3. 安卓手机运行ios教程_英雄联盟手游傻瓜安装教程,IOS/安卓双端可用!
  4. Javassist实现JDK动态代理
  5. feedback.php,feedback.php
  6. 常用的后端命令 【笔记】
  7. oracle排序后第一条,Oracle排序取第一条数据
  8. 以太坊概念知识入门篇
  9. OpenCV——无法打开“opencv2/opencv.hpp”文件
  10. OCP考试题库(精准无比)
  11. keil转换c为汇编语言,如何用Keil生成bin、汇编、C与汇编混合文件?
  12. 三星S7edge刷极光ROM的总结_我是亲民_新浪博客
  13. 深入理解正向代理和反向代理
  14. 获取apk运行占手机RAM大小
  15. codeforces1438C Engineer Artem
  16. 【无人机】【2012.01】微型直升机的视觉导航
  17. 王者荣耀服务器维护5月22,王者荣耀5月22日更新维护公告 更新内容汇总
  18. Android手机 根目录的含义
  19. 如何将图片素材亮度调高照片光线调亮ps教程ps学习ps基础课程教程
  20. PWA:安装 Web 应用

热门文章

  1. Python字典集合数据结构深入理解
  2. 慕课软件质量保证与测试(第七章.课后作业)
  3. 安装Selenium+Firefox+Firepath+Firebug
  4. 华为十年架构师实战经验总结:大规模分布式系统架构与设计实战
  5. PyCharm中的Debug使用
  6. igm焊接机器人基本操作_焊接机器人技术讲解.ppt
  7. 带本信息论看《三体》——信息论课程论文
  8. mcgs 云服务器,MCGS软件系统的组态环境和运行环境
  9. hadoop中HDFS命令遇到的问题
  10. 打补丁更新不适用计算机,安装补丁“此更新不适用于你的计算机”解决办法