У меня есть несколько последовательностей (с неравной длиной) в форме:
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 (динамического деформирования времени):
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.