Вычислить матрицу расстояний для последовательностей неравной длины
У меня есть несколько последовательностей (с неравной длины) в форме:
series = [ [1, 2, 5, 6, 9, 1],
[2, 6, 1, 4, 5],
[3, 5, 6, 7, 1, 4, 8, 7, 9],
[4, 3, 2, 1],
...
[2, 9, 7, 6, 5]
]
shape = (38, )
Длина последовательностей составляет около 1000-2000. Всего 38 последовательностей. Мне нужно выполнить иерархическую кластеризацию для них, для чего я определил пользовательскую меру расстояния, основанную на взвешенном DTW (Dynamic Time Warping):
def myMetric(x, y):
return weighted_dtw(x, y, dist=sd.euclidean)[0]
Есть ли способ эффективно вычислить матрицу расстояний для вышеуказанных серий, используя myMetric в качестве меры расстояния? Итерация по всей серии будет O(n^2) и займет слишком много времени для 38 последовательностей в моей системе. Кроме того, я попытался использовать sklearn.metrics.pairwise_distances,
dist = pairwise_distances(series, metric=myMetric)
но это требует, чтобы ряд был равной длины, и выдает следующую ошибку:
ValueError: setting an array element with a sequence.