Я пытаюсь вычислить матрицу расстояний DTW, которая будет рассматривать 150 000 временных рядов, каждый из которых имеет от 13 до 24 наблюдений, то есть полученная матрица расстояний будет представлять собой список размером приблизительно (150 000 x 150 000) / 2 =11 250 000 000.
Я запускаю это на большом кластере данных размером 200 ГБ, но получаю ошибку памяти.
Я использую библиотеку dtaidisatance и использовал distance_matrix_fast функция, которую я мог бы передать всем временным рядам одновременно в списке, но у меня была похожая ошибка памяти, но выходящая из пакета.ошибка была сброшена сразу же, как только я ее запустил.Я также использовал блочную функцию в пакете, но, похоже, он не может взять все временные ряды сразу, чтобы начать с.
Поэтому я решил пройти цикли вычислите расстояние между двумя парами временных рядов, а затем добавьте его в список.Однако после долгого запуска я снова получаю ту же ошибку памяти, что и следующую:
Файл "/root/anaconda2/test/final_clustering_2.py", строка 93, в distance_matrix_scaled.append (dtw.distance_fast (Series_scaled [i], Series_scaled [j])) MemoryError
Вот мой код ниже:
distance_matrix_scaled = []
m=len(Series_scaled)
#m=100000
for i in range(0, m - 1):
for j in range(i + 1, m):
distance_matrix_scaled.append(dtw.distance_fast(Series_scaled[i], Series_scaled[j]))
# save it to the disk
np.save('distance_entire', distance_matrix_scaled)
Не могли бы вы помочь ответить, почему я получаю эту ошибку памяти?это предел списка Python или размер моего кластера, вызывающий это?Есть ли какой-нибудь умный способ или формат в numpy, который я мог бы использовать для решения этой проблемы?