动态时间扭曲递归实现

2024-09-28 04:21:21 发布

您现在位置:Python中文网/ 问答频道 /正文

女士们先生们,晚上好,
我想用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

Tags: import算法距离len度量np时间动态
1条回答
网友
1楼 · 发布于 2024-09-28 04:21:21

Python索引从零开始。在第一次调用元素[3,3](不存在)时,会出现越界错误。在

我对动态时间扭曲不是很熟悉,但我认为应该使用特定轴的.shape,而不是{},它只是数组的第一维的长度。即使这样,您也必须调整递归以迭代每个连续数组的边界。在

最后,return语句应该与if块处于同一级别。目前,compute_dtw在前两种情况下不会返回任何内容,仅当形状在两个轴上都大于长度1时。在

相关问题 更多 >

    热门问题