5

関連する緯度と経度を持つ不規則にグリッド化されたデータセット (生の衛星データ) を、 で指定された規則的にグリッド化された緯度と経度のセットにマッピングしようとしていますbasemap.makegrid()。装着して使用matplotlib.mlab.griddataしていmpl_toolkits.natgridます。以下は、whosipython で出力として使用されている変数のリストと、変数に関するいくつかの統計です。

Variable   Type       Data/Info
-------------------------------
datalat    ndarray    666x1081: 719946 elems, type `float32`, 2879784 bytes (2 Mb)
datalon    ndarray    666x1081: 719946 elems, type `float32`, 2879784 bytes (2 Mb)
gridlat    ndarray    1200x1000: 1200000 elems, type `float64`, 9600000 bytes (9 Mb)
gridlon    ndarray    1200x1000: 1200000 elems, type `float64`, 9600000 bytes (9 Mb)
var        ndarray    666x1081: 719946 elems, type `float32`, 2879784 bytes (2 Mb)

In [11]: var.min()
Out[11]: -30.0

In [12]: var.max()
Out[12]: 30.0

In [13]: datalat.min()
Out[13]: 27.339874

In [14]: datalat.max()
Out[14]: 47.05302

In [15]: datalon.min()
Out[15]: -137.55658

In [16]: datalon.max()
Out[16]: -108.41629

In [17]: gridlat.min()
Out[17]: 30.394031556984299

In [18]: gridlat.max()
Out[18]: 44.237140350357713

In [19]: gridlon.min()
Out[19]: -136.17646180595321

In [20]: gridlon.max()
Out[20]: -113.82353819404671

datalatdatalonは元のデータ座標です

gridlatgridlonは補間する座標です

var実際のデータが含まれています

これらの変数を使用すると、呼び出しgriddata(datalon, datalat, var, gridlon, gridlat)が完了するまでに 20 分もかかり、nan. データを見ると、緯度と経度は正しいように見え、元の座標は新しい領域の一部と重なり、いくつかのデータ ポイントは新しい領域の外にあります。誰か提案はありますか?ナン値は、私が何か愚かなことをしていることを示唆しています...

4

4 に答える 4

2

おそらく、griddataは非常に難しいです。ランダムにサンプリングされたデータを処理するように設計されています。データはほぼ確実に定期的にサンプリングされます。ターゲットの出力グリッドと同じグリッド上ではありません。

地球のトポロジーまたは曲率がyoruの結果に影響を与える場合は、小さなチップでのアフィン変換や一連のアフィン変換など、はるかに単純なアプローチを検討してください。

役立つ可能性のある、すぐに使用できるソリューションがいくつかあります。 GDALは良い例です。

また、このタイプの問題はGISでよく議論されます。見る:

https://gis.stackexchange.com/questions/10430/changing-image-projection-using-python

于 2011-09-15T01:13:26.160 に答える
2

mlab.griddataルーチンによって、出力データに不要な追加の制約が導入される可能性があるようです。入力位置は何でもかまいませんが、出力位置は規則的なグリッドでなければなりません- あなたの例は緯度/経度空間にあるので、地図投影法の選択はこれに違反するかもしれません (つまり、x/y の規則的なグリッドは緯度の規則的なグリッドではありません) /lon)。

別の方法としてSciPyinterpolate.griddataのルーチンを試すこともできます。ただし、呼び出しシグネチャが異なるため、位置変数を 1 つの配列に結合する必要があります。次のようなものです。

import scipy.interpolate
data_locations = np.vstack(datalon.ravel(), datalat.ravel()).T
grid_locations = np.vstack(gridlon.ravel(), gridlat.ravel()).T
grid_data      = scipy.interpolate.griddata(data_locations, val.ravel(),
                                            grid_locations, method='nearest')

最近傍補間用。これにより、2 つの次元に対応する 2 つの列を持つ配列に位置が取得されます。マップ投影の変換された空間で補間を実行することもできます。

于 2011-12-15T16:40:15.503 に答える
1

pclormesh を使用する場合、補間を行う必要はありません。pcolormesh は、こ​​こで指定した方法でデータ構造を喜んで受け入れます。

from mpl_toolkits.basemap import Basemap
m = Basemap(-----)
x,y = m(datalon, datalat)
m.pcolormesh(x,y,var)
plt.show()

親切にこれを使用して、これが機能するかどうか教えてください。

ただし、軌道データの重なりがある場合、pcolormesh には問題があります。この私の質問を参照してください。何か役に立つものがあるかもしれません。

軌道データのプロットに pcolormesh を使用する

于 2012-09-07T11:26:32.220 に答える
1

データ ポイントのデータ ポイントが にあるようなグリッド上にデータがある場合は(datalon[i], datalat[j])、代わりに をdata[i,j]使用できます。ただし、一部の地理固有のライブラリは、より多くの機能を提供する場合があります。scipy.interpolate.RectBivariateSplinegriddata

于 2011-09-20T21:16:26.220 に答える