4D データ配列 (時間、深さ、緯度、経度。以下dask_array
に示す) の形状は通常 (6000, 31, 189, 192) で、サイズは ~25GB (したがって、dask を使用したいのですが、numpy を使用してこれらの配列を処理しようとすると、メモリ エラーが発生します)。
各レベル/緯度/経度のポイントで時間軸に沿って 3 次多項式を当てはめ、結果の 4 つの係数を保存する必要があります。したがってchunksize=(6000, 1, 1, 1)
、グリッド ポイントごとに個別のチャンクがあるように設定しました。
これは、3 次多項式の係数を取得するための私の関数です (time_axis
軸の値は、他の場所で定義されたグローバルな 1D numpy 配列です)。
def my_polyfit(data):
return numpy.polyfit(data.squeeze(), time_axis, 3)
(したがって、この場合、numpy.polyfit
長さ 4 のリストを返します)
これは、各チャンクに適用する必要があると思ったコマンドです。
dask_array.map_blocks(my_polyfit, chunks=(4, 1, 1, 1), drop_axis=0, new_axis=0).compute()
これにより、時間軸がなくなり (したがってdrop_axis=0
)、その場所に (長さ 4 の) 新しい係数軸があります。
このコマンドを実行すると が表示されるので、どこでどのように?IndexError: tuple index out of range
の使用を誤解したのか疑問に思っています。map_blocks