DTW本来用来对比声音的相似程度,本来我用matlab写过一个,今天学习了半天的py,临睡前试试用py写。
刚写完一堆报错,然后就一个一个百度。
最后可以成功输出。
DTW具体算法及介绍
代码部分:
import random
import math
import numpy
x=[0]*1000
y=[0]*1000
n=eval(input())
m=eval(input())
con=0# con记录路径长度
for i in range(n): x[i]=random.randint(0,100)
for i in range(m): y[i]=random.randint(0,100)#生成x,y对比序列
D=numpy.zeros((m,n))# 构造距离矩阵
def DTW(i,j,con):#进行规划
if(i==0):
for k in range(j): con+=D[0][k]
return con
if(j==0):
for k in range(i): con+=D[k][0]
return con
con+=min(DTW(i-1,j,con)+D[i][j],DTW(i,j-1,con)+D[i][j],DTW(i-1,j-1,con)+2*D[i][j])
return con
for i in range(m):#对距离矩阵赋值
for j in range(n):
D[i][j]=math.sqrt(x[i]^2+y[j]^2)
print("最短距离是",DTW(m-1,n-1,0))
我后来发现已经有大佬写过了,我也没去看过,但是我觉得自己写的应该算是思路比较清晰了,感觉代码也不是很烦。