numpyで3D配列を正確にスライスしてソートする方法について少し混乱しています。これを手動で行うには多くの方法があるようですが、私は を使用してこれを行う必要がありますnumpy.where()
。たとえば、lo360
2D 経度値の場合lat2d
、2D の緯度値yi
は経度値xi
の 1D 配列であり、緯度値の 1D 配列です。
xi
およびyi
は動的に変化して小さな地理的地域を表し、lo360
およびlat2d
はタイプ (-90,90) および (0,360) の惑星の静的な緯度と経度です。xi
と同様の形式ですlo360
がyi
、昇順ではなく降順です。したがって、表す 3D 配列がA(levels,lat,lon)
あり、領域を抽出したい場合:
slice2d = np.where( (lo360 <= xi.max()) &
(lo360 >= xi.min()) &
(lat2d <= yi.max()) &
(lat2d >= yi.min()) )
lon_old = lo360[slice2d]; print lon_old.shape
(441,)
2D スライスが必要な場合、これは 1D 配列を返します。ただし、データは正しいので、これは私の問題ではありません。
次に、3D 配列をスライスしようとすると、A[i][slice2d]
動的に検証するのが容易ではない 1D 配列が得られます。griddata
以前は 3D 配列xi
とyi
解像度を使用していましたが、yi
緯度を昇順に変更しました: yi = yi[::-1]
:
for i in np.arange(4):
nvals[i] = matplotlib.mlab.griddata(lat_old,lon_old,
mvals[i][slice2d],
yi,xi)
ここで問題が始まると思います。結果に降順の緯度が必要なので、これをnvals
:に行いnvals = nvals[:,::-1,:]
ます。しかし、データはすべてめちゃくちゃです。インデックス作成に何らかのエラーがあると思われますが、python がエラーを返さなかったので、インデックス作成で何かを考えていますが、別のことを考えています。
おそらく、あなたの専門家の 1 人が、厄介な問題を発見したり、より良い方法を提案したりできるでしょう。ファイルの添付方法がわかったら画像を添付します。