これは非常に複雑な質問であり、答えはかなり複雑で、間違いを犯す可能性がたくさんあります。コメントで言っているように、次のような経度、緯度のベクトルがあります。
'0.5x0.5'
np.arange(-89.75,90.25,0.5) #[-89.75,-89.25,...,89.25,89.75], latitudes
np.arange(0.25,360.25,0.5) #[0.25,0.75,...,359.25,359.75], longitudes
またはこれ:
'1x1'
np.arange(-90.0,91.0,1.0) #[-90.0,-89.0,...,89.0,90.0], latitudes
np.arange(-180.0,180.0,1.0) #[-180.0,-179.0,...178.0,179.0], longitudes
関連するデータセットを次の形式に変換する必要があります。
'73x96 (or N48)'
np.arange(-90.0,92.5,2.5) #[-90.0,-87.5,...,87.5,90.0] latitudes
np.arange(0.0,360.00,3.75) #[0.0,3.75,...,352.5,356.25] longitudes
またはこれ:
'1.25x1.875 (or N96)'
np.array(-90.0,91.25,1.25) #[-90.0,-88.75,...,90.00] latitudes
np.array(0.0,360.00,1.875) #[0.0,1.875,...,358.125] longitudes
すべてのエントリは、グリッド セルの中心用です。
部分的に良いニュースは、補間を行う必要がないことです。upsample
エントリを繰り返すだけで (縦方向と横方向の両方で) できます。つまり、間隔のあるデータ セットがある場合は、すべての列と行を繰り返すことで1*1
、間隔のあるデータ セットに変更できます。0.5*0.5
グリッドデータ!最初のセルの 1 つをより小さいセルに分割することを考えてみてください。密度は、元のセルと同じように、すべての新しいセルで同じです。次のように実行できます。
data_up = np.repeat(data, 2, axis=0)
data_up = np.repeat(data_up, 2, axis=1)
これは、仮定を行わず、データを失うこともないため、優れたアプローチです。これは後で必要になります。
downsample
セルを一緒に追加し、セルの数を平均化することにより、セルの幅を縦方向に増やすことができます。これは、縦方向に隣接する (水平) セルの面積が等しいためです。downsampling
元の間隔の整数倍ではないグリッド間隔にする場合は、最初にupsample
、上記のようにする必要があります (これは要件です..)。
最も難しいのは、緯度方向にダウンサンプリングすることです。これは、ここでは密度が異なり、それらの密度に関連付けられている実際の領域も異なるためです。これに対処する方法は次のとおりです。
- 初期緯度グリッドと目的の緯度グリッドの倍数である新しい緯度グリッド間隔にアップサンプリングします (上記で説明したように)。
- すべての細胞の細胞表面積を計算します (これが必要な式です)。
- これら 2 つの配列を掛け合わせて、アップサンプリングされたデータ配列内のすべてのデータ セルからの総排出量を取得します。
- 新しいセルを構成するすべての総排出量セルを合計します (これをアレイ全体で行います)。
- その新しいセルの総面積 (サブセルのすべての面積の合計) で割り、すべての新しいセルに対してこれを行います。
- それでおしまい。
注意すべき悪い点:
一部のデータセット間には縦方向の位相差があります。これを可能にするためにデータを正しく再配置するのが難しい場合があります。
極セル、ここでlatitude = 90 or -90
. これらのセルは、緯度の高さが他のすべてのセルの半分であるため、問題があります。これは慎重に許可する必要があります。これらのセルに対して計算された面積が正しいことを確認し、アップサンプリングの場合は、pole
これを反映するためにエントリを半分だけ繰り返す必要があります。