それぞれ13から24の観測値を持つ150,000の時系列を調べるDTW距離行列を計算しようとしています-つまり、生成された距離行列は約(150,000 x 150,000)/2 = 11,250,000,000のサイズのリストになります。
これを 200GB のサイズのビッグ データ クラスターで実行していますが、メモリ エラーが発生しています。
私はdtaidisatanceライブラリを使用しており、時系列全体を一度にリストに渡すことができるdistance_matrix_fast関数を使用しましたが、同様のメモリエラーが発生しましたが、パッケージから出てきました。ただし、実行するとすぐにエラーがスローされました。パッケージのブロック機能も使ったのですが、そもそも時系列を一気に取り込めないようです。
そこで、ループを実行して時系列の 2 つのペアごとの距離を計算し、それをリストに追加することにしました。ただし、長時間実行した後、次のように同じメモリエラーが再び発生します。
ファイル「/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の巧妙な方法または形式はありますか?