1

たとえば、0.5x0.5 グリッドから 2.5x3.75 グリッドまで、Python で等間隔の 2D 緯度経度データの面積加重再グリッディングを実行できるようにしたいと考えています。このデータは kg/m^2/s 単位の排出量であるため、質量と空間分布を保存する必要があります。

多くの scipy 補間ルーチンがあることは知っていますが、この場合、どれを使用するのが最適かはわかりません。絶対に必要でない限り、可能であれば追加の python パッケージをあまり多くインストールする必要はありません (つまり、scipy+numpy がインストールされていますが、必要なことを実行する専門の python パッケージをインストールする必要はありません。特定のクラス構造などにデータを格納するためです。ただし、必要に応じてこれを行います!)。

これは、Pythonでこれらの種類のことを行う方法と、それを行う方法を理解するための少しの学習演習でもあります.

4

1 に答える 1

3

これは非常に複雑な質問であり、答えはかなり複雑で、間違いを犯す可能性がたくさんあります。コメントで言っているように、次のような経度、緯度のベクトルがあります。

'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、上記のようにする必要があります (これは要件です..)。

最も難しいのは、緯度方向にダウンサンプリングすることです。これは、ここでは密度が異なり、それらの密度に関連付けられている実際の領域も異なるためです。これに対処する方法は次のとおりです。

  1. 初期緯度グリッドと目的の緯度グリッドの倍数である新しい緯度グリッド間隔にアップサンプリングします (上記で説明したように)。
  2. すべての細胞の細胞表面積を計算します (これが必要な式です)。
  3. これら 2 つの配列を掛け合わせて、アップサンプリングされたデータ配列内のすべてのデータ セルからの総排出量を取得します。
  4. 新しいセルを構成するすべての総排出量セルを合計します (これをアレイ全体で行います)。
  5. その新しいセルの総面積 (サブセルのすべての面積の合計) で割り、すべての新しいセルに対してこれを行います。
  6. それでおしまい。

注意すべき悪い点:

  1. 一部のデータセット間には縦方向の位相差があります。これを可能にするためにデータを正しく再配置するのが難しい場合があります。

  2. 極セル、ここでlatitude = 90 or -90. これらのセルは、緯度の高さが他のすべてのセルの半分であるため、問題があります。これは慎重に許可する必要があります。これらのセルに対して計算された面積が正しいことを確認し、アップサンプリングの場合は、poleこれを反映するためにエントリを半分だけ繰り返す必要があります。

于 2012-05-22T18:49:21.510 に答える