问题描述
我在这里阅读了 DTW 计算的功能: https://tslearn.readthedocs.io/en/stable/user_guide/dtw.html
在我看来,以下两行之一有问题:
C[0,0] = 0.
dist = d(x_i,y_j) ** 2
或者对于 [0] 和 [1] 上的简单 dtw,您将不会有 1 作为答案。所以两种可能的更正:
C[0,0] = d(x_0,y_0) ** 2
或
dist = d(x_{i-1},y_{j-1}) ** 2
如果我们想推广它,我认为这是第二种解决方案。
解决方法
文本指定伪代码假定时间索引从 1 开始,
事实上,主循环从 1 开始。
因此,import SwiftUI
import RealityKit
struct ContentView : View {
@State private var isWalkthroughViewShowing = true
@State private var showInfo: Bool = false
var body: some View {
Group{
if isWalkthroughViewShowing{
WalkthroughView(isWalkthroughViewShowing: $isWalkthroughViewShowing)
} else {
ARViewContainer().edgesIgnoringSafeArea(.all)
ControlView(showInfo: $showInfo)
}
}
}
}
初始化是正确的。
成本矩阵的第一个单元格将如下所示:
C[0,0] = 0
并且当对 0 | inf | ...
inf | inf | ...
...
和 i = 1
评估以下行时
j = 1
C[i,j] = dist + min(C[i-1,j],C[i,j-1],C[i-1,j-1])
函数将简单地返回零,
和 min
将简单地具有第一次计算的值,
即C[1,1]
。
这是一种常见的DTW实现方式, 这也是它在 Wikipedia 上的描述方式。