女士们先生们,晚上好,
我想用Python实现一个动态时间扭曲(DTW)算法。在
为了进行测试,我建立了一个小的随机距离矩阵(例如,由曼哈顿度量生成),然后用它调用我的DTW算法。在
import numpy as np
from dynamic_time_warping import compute_dtw
x=np.zeros((3,4))
x[0,2]=1.0
x[0,3]=2.0
x[1,2]=1.0
x[1,3]=2.0
x[2,0]=1.0
x[2,1]=1.0
x[2,3]=1.0
compute_dtw(x)
我的DTW算法如下所示:
^{pr2}$我想让算法取x的m*n值,然后把它加到下一个最小值上,我用一个更小的矩阵再次调用这个函数。(compute_dtw(W[0:-1, 0:-1]), compute_dtw(W[0:-1]), compute_dtw(W[:, 0:-1]))
在浏览完脚本后,我会出现以下错误:
C=W[len(W),len(W)]+min(compute_dtw(W[0:-1, 0:-1]), compute_dtw(W[0:-1]), compute_dtw(W[:, 0:-1])) IndexError: index 3 is out of bounds for axis 0 with size 3
显然,我调用的是数组中不存在的元素,但我无法确定它在哪里中断。在
谢谢你的建议和帮助!在
//更新代码:
def compute_dtw(W):
if W.shape[0]==1 and W.shape[1]==1:
C=0.0
elif W.shape[0]==1 or W.shape[1]==1:
C=float("inf")
else:
C=W[W.shape[0]-1,W.shape[1]-1]+min(compute_dtw(W[0:-1, 0:-1]), compute_dtw(W[0:-1]), compute_dtw(W[:, 0:-1]))
return C
Python索引从零开始。在第一次调用元素[3,3](不存在)时,会出现越界错误。在
我对动态时间扭曲不是很熟悉,但我认为应该使用特定轴的},它只是数组的第一维的长度。即使这样,您也必须调整递归以迭代每个连续数组的边界。在
.shape
,而不是{最后,
return
语句应该与if
块处于同一级别。目前,compute_dtw
在前两种情况下不会返回任何内容,仅当形状在两个轴上都大于长度1时。在相关问题 更多 >
编程相关推荐