3

不規則なグリッド (ランバート コニカル) 上のデータを通常のグリッドに再グリッド化する必要があります。pyresample が私の最善の策だと思います。実際、私の元の緯度、経度は1Dではありません(basemap.interpまたはscipy.interpolate.griddataを使用するために必要なようです)。

このSOの回答は役に立ちました。ただし、空の補間データが得られます。これは、影響範囲の選択と、データがラップされている (??) ことに関係していると思います。

これは私のコードです:

import numpy as np
from matplotlib import pyplot as plt
import netCDF4
%matplotlib inline
url = "http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/NARR/Dailies/monolevel/hlcy.2009.nc"
SRHtemp = netCDF4.Dataset(url).variables['hlcy'][0,::]
Y_n     = netCDF4.Dataset(url).variables['y'][:]
X_n     = netCDF4.Dataset(url).variables['x'][:]
T_n     = netCDF4.Dataset(url).variables['time'][:]

lat_n     = netCDF4.Dataset(url).variables['lat'][:]
lon_n     = netCDF4.Dataset(url).variables['lon'][:]

lat_n と lon_n は不規則で、緯度と経度は投影された座標 x、y に対応します。

lon_n のやり方のため、次のように追加しました。

lon_n[lon_n<0] = lon_n[lon_n<0]+360

私がそれらをプロットすると、見栄えがよく、問題ないようになります。

ここに画像の説明を入力

次に、通常の座標の新しいセットを作成します。

XI = np.arange(148,360)
YI = np.arange(0,87)
XI, YI = np.meshgrid(XI,YI)

上記の回答に続いて、次のコードを書きました。

pyresample.geometry から SwathDefinition をインポート pyresample.kd_tree から resample_nearest をインポート

def_a = SwathDefinition(lons=XI, lats=YI)
def_b = SwathDefinition(lons=lon_n, lats=lat_n)
interp_dat = resample_nearest(def_b,SRHtemp,def_a,radius_of_influence = 70000,fill_value = -9.96921e+36)

データの解像度は約 30km なので、70km と入力しました。入力した fill_value はデータから取得したものですが、もちろんゼロまたは nan を入力することもできます。

ただし、空の配列を取得します。

私は何を間違っていますか?また、別の方法がある場合は、それを知りたいと思っています。Pyresample のドキュメントは少し薄いので、もう少し助けが必要です。

別の griddata 関数を使用することを提案するこの回答を見つけました:

import matplotlib.mlab as ml
resampled_data = ml.griddata(lon_n.ravel(), lat_n.ravel(),SRHtemp.ravel(),XI,YI,interp = "linear")

それは大丈夫だと思われます:

ここに画像の説明を入力

しかし、非常に強力なように見えるので、pyresample についてもっと理解したいと思います。

4

1 に答える 1

3

問題は、XI と XI が浮動小数点数ではなく整数であることです。これを修正するには、次のようにします。

XI = np.arange(148,360.)
YI = np.arange(0,87.)
XI, YI = np.meshgrid(XI,YI)

整数データ型を処理できないことは、文書化されておらず、直感的ではなく、おそらくバグのある pyresample の動作です。

コーディング スタイルに関するいくつかの注意事項:

  • XI 変数と YI 変数を上書きする必要はありません。これによって得られるものはあまりありません。
  • netCDF データセットを 1 回ロードし、そのオブジェクトを介して変数にアクセスするだけです。
于 2016-09-13T18:09:14.650 に答える