問題タブ [dask-delayed]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
dask - Xarray Dask.delayed が遅い: 2 つのデータセット間で高速に選択/補間する方法
私は 2 つのデータセット (satdata と atmosdata と呼ばれます) を持っています。Atmosdata は、緯度と経度で均等にグリッド化されています。Atmosdata はディメンション (緯度: 713、レベル: 37、経度: 1440、時間: 72) を持ち、合計サイズは 12GB です。Atmosdata には、温度、湿度などのいくつかの変数があります。湿度は、(時間、レベル、緯度、経度) の形をしています。
Satdata には衛星観測が含まれており、(across_track: 90、channel: 3、time: 32195) の次元があり、90*3*32195=8692650 ポイントのデータがあります。Across_track は、トラック位置を横切る衛星 FOV を意味します。Satdata は、緯度/経度で均等にグリッド化されていません。たとえば、satdata.latitude には (time, channel, across_track) の次元があり、satdata.longitude、satdata.sft と同じです。
Atmosdata と satdata の「time」変数には同じ日の時間が含まれていますが、これら 2 つのデータセットでは値が異なります。satdata と同じ緯度、経度、時刻を持つ atmosdata (湿度と温度など) を見つける必要があります。
これを実現するために、satdata を繰り返し処理して、各観測の場所と時間を見つけます。次に、対応する atmosdata を見つけます (最初に衛星データの場所に最も近いグリッド、次に衛星時間に補間されます)。最後に、すべての反復から得られた atmosdata を 1 つのデータセットに連結します。
私のコードの一部は、小さなデータを使用して次のようになります。
マッチング機能は以下の通りです。
1) コードを起動すると、動作します。しかし、コードで小さなデータ サイズを使用せず、代わりに元のデータ (上記の寸法) を使用すると、計算を開始するとエラーが発生します。
2) 他の次元のデータセット、satdata (across_track: 90、channel: 3、time: 100)、および atmosdata (緯度: 71、レベル: 37、経度: 1440、時間: 72) を使用すると、計算に非常に時間がかかります。時間。私のコーディングは、この問題を迅速に解決するために DASK を使用するには最適ではないと思います。
2) for ループを使用するよりも良い方法はありますか? for ループは、迅速な計算の目的で DASK を利用しない場合があります。
3) satdata をチャンクし、satdata のチャンクで緯度と経度の制限を見つけ、この制限に従って atmosdata をチャンクし、最後に satdata と atmosdata の各チャンクに match 関数を適用するのは良い考えでしょうか? これが良いアイデアである場合、satdata の各チャンクを手動で反復処理する方法はまだわかりません....
4) この関数は、satdata と atmosdata の 2 つの引数を使用します。これら 2 つのデータセットは非常に大きくなる可能性があるため (atmosdata の場合は 12G)、計算は遅くなりますか?
5) 選択で .value を使用しなければならなかった関数では、大きな入力データを使用すると、計算が遅くなりますか?
前もって感謝します !
よろしくお願いします
シャオニ