dtw算法 c语言实现,DTW算法的python实现
关于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实现相关推荐
- c语言考试算法,c语言考试常用算法docx.docx
c语言考试常用算法docx 求1~100的累加和#includevoid main(){inti=1,sum=0;while (i<=100){sum+=i;i++;}printf(" ...
- c代码实现 ifft运算_fft算法c语言_matlab fft算法_ifft c语言
FFT快速算法C程序_工学_高等教育_教育专区.电子信息工程综合课程设计报告书 DSP 课程设计 报告 题学 目: 院: FFT 快速算法 C 程序 计算机与信息工程学院 09 ... fft算法代码 ...
- 函数c语言桶排算法,C语言基本排序算法之桶式排序实例
本文实例讲述了C语言基本排序算法之桶式排序.分享给大家供大家参考,具体如下: 桶式排序是对一个有n个整型元素的数组a[n],其中对任意i,0 <= a[i] <= m的特殊排序算法. 可以 ...
- 时钟页面置换算法c语言,clock置换算法例题(改进clock置换算法例题讲解)
Clock页面置换算法: 6)动态给出页面调用序列并进行调度: 7)输出置换结. C++编程要? 考试用 哪位大侠 帮帮 快点 谢谢了 这很简单啊,要打字太多了.不过网上这类算法举例很少,就看你怎么理 ...
- c语言编程实现dsa算法,C语言实现DSA算法(不包括质数生成)
1.头文件部分 #include #include #include 2.判断大数是不是0或1 参见<C语言实现RSA算法> 3.大数加减乘除幂模 参见<C语言实现RSA算法> ...
- 弗洛伊德算法c语言path,Floyd算法(弗洛伊德算法)
算法描述: Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法.从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按 ...
- 用c语言编写银行家算法,C语言实现银行家算法
<C语言实现银行家算法>由会员分享,可在线阅读,更多相关<C语言实现银行家算法(8页珍藏版)>请在人人文库网上搜索. 1.C语言实现银行家算法(源码.运行结果)一. 源码/* ...
- 最佳值换算法c语言,页面置换算法---最佳置换算法(OPT)
最佳置换算法(OPT) 什么是OPT 最佳置换算法,其所选择的被淘汰的页面将是以后永不使用的,或是在最长(未来)时间内不再被访问的页面.采用最佳置换算法通常可保证最低的缺页率.但是人们目前还无法与之, ...
- shuffle算法c语言,C#Shuffle算法(洗牌算法、抽样算法)
Fisher-Yates Shuffle算法 1.创建一个新的list 2.随机取出当前0-list.Count其中一个数 3.把老list当前随机数位置添加到新list 4.老list删除这个数 5 ...
- 格雷码算法c语言实验报告,算法设计与分析实验报告
本科生实验报告 课程名称:算法设计与分析 实验项目:递归和分治算法 实验地点:计算机系实验楼110 专业课:物联网1601学生.2016002105 学生姓名:于 指导员:郝晓丽 2018年5月4日 ...
最新文章
- 内存分配器memblock【转】
- Asp.Net Core 入门(一)——Program.cs做了什么
- 安卓手机运行ios教程_英雄联盟手游傻瓜安装教程,IOS/安卓双端可用!
- Javassist实现JDK动态代理
- feedback.php,feedback.php
- 常用的后端命令 【笔记】
- oracle排序后第一条,Oracle排序取第一条数据
- 以太坊概念知识入门篇
- OpenCV——无法打开“opencv2/opencv.hpp”文件
- OCP考试题库(精准无比)
- keil转换c为汇编语言,如何用Keil生成bin、汇编、C与汇编混合文件?
- 三星S7edge刷极光ROM的总结_我是亲民_新浪博客
- 深入理解正向代理和反向代理
- 获取apk运行占手机RAM大小
- codeforces1438C Engineer Artem
- 【无人机】【2012.01】微型直升机的视觉导航
- 王者荣耀服务器维护5月22,王者荣耀5月22日更新维护公告 更新内容汇总
- Android手机 根目录的含义
- 如何将图片素材亮度调高照片光线调亮ps教程ps学习ps基础课程教程
- PWA:安装 Web 应用
热门文章
- Python字典集合数据结构深入理解
- 慕课软件质量保证与测试(第七章.课后作业)
- 安装Selenium+Firefox+Firepath+Firebug
- 华为十年架构师实战经验总结:大规模分布式系统架构与设计实战
- PyCharm中的Debug使用
- igm焊接机器人基本操作_焊接机器人技术讲解.ppt
- 带本信息论看《三体》——信息论课程论文
- mcgs 云服务器,MCGS软件系统的组态环境和运行环境
- hadoop中HDFS命令遇到的问题
- 打补丁更新不适用计算机,安装补丁“此更新不适用于你的计算机”解决办法