DTW, вопрос об инициализации C [0,0]

#python #dtw

#питон #dtw

Вопрос:

Я прочитал функцию вычисления DTW здесь: https://tslearn.readthedocs.io/en/stable/user_guide/dtw.html

На мой взгляд, в одной из этих 2 следующих строк что-то не так :

 C[0, 0] = 0.
dist = d(x_i, y_j) ** 2
 

Или для простого dtw на [0] и [1] у вас не будет 1 в качестве ответа. Итак, оба возможных исправления :

 C[0,0] = d(x_0, y_0) ** 2
 

или

 dist = d(x_{i-1}, y_{j-1}) ** 2
 

Я думаю, что это второе решение, если мы хотим его обобщить.

Ответ №1:

В тексте указано, что псевдокод предполагает временные индексы, начинающиеся с 1, и фактически основной цикл начинается с 1. Следовательно, эта 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] будет просто иметь значение первого вычисления,
т.е. dist .

Это распространенный способ реализации DTW, он также описан в Википедии.