我正在尝试计算一个 DTW 距离矩阵,该矩阵将查看 150,000 个时间序列,每个时间序列具有 13 到 24 个观测值 - 也就是说,生成的距离矩阵将是一个大小约为 (150,000 x 150,000)/2= 11,250,000,000 的列表。
我在一个大小为 200GB 的大数据集群上运行它,但出现内存错误。
我正在使用 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中是否有一种聪明的方法或格式可以用来解决这个问题?