私は「シンプルな」目的を念頭に置き、達成することは非常に困難です。私は3つの2次元配列lat
,lon
およびdata
をすべて次元(24576、24576)で持っています。最初の2つはマップ上にプロットしようとしている変数data
の緯度と経度座標です。私はバイナリファイルとテキストファイルの組み合わせからこれらのデータをすべて読み込んでいます。そのため、前処理操作は実質的に不可能であり、Pythonスクリプトで行う必要があります。Pythonで大きなデータセットから2次元の緯度、経度、データをサブセット化する(IMS snowcover)
配列の次元が与えられると、メモリの制約のため、地球上の小さな領域でベースマップ投影を選択してもデータを直接描画することは事実上不可能です。私はすでにそれを試して、basemap.contourf
でプロットしようとするとメモリエラーが発生しました。
したがって、輪郭関数に渡す前に配列をサブセット化する必要があります。私は多くのことを試しましたが、何も動作していないようです。私の考えはlats
とlons
は、2-Dの配列座標です。この
lat_bnds, lon_bnds = [35, 50], [5, 20]
condition=((lats > lat_bnds[0]) & (lats < lat_bnds[1])) & (lons > lon_bnds[0]) & (lons < lon_bnds[1])
ような何かをしました。これは、元のデータをマスクするために使用することができるが、サブセットをマスクすることができないlats
(または同等にはlons
)と同じ次元を持つ2次元ブール値配列を生成する。
で同じ条件を使用すると、使用できないアレイ形状の(2, 2564856)
が生成されます。ここで問題となるのは、2-D配列のあらゆる点で満足される必要がある複数の条件があり、連続する矩形部分行列につながるという保証はないということです。しかし、それらのデータをプロットするために、私は実際にそれらを部分集合するか、またはそれらを詳しく説明する別の方法を見つける必要があります。
明らかなものがありませんか?エラーが発生することなく元のデータをプロットする他のスマートな方法はありますか?あなたが必要なファイルをダウンロードしたと仮定して、データを読み込むためのhttp://nsidc.org/data/G02156
簡単なスクリプト:データの
ソース
import numpy as np
import pandas as pd
from mpl_toolkits.basemap import Basemap # Import the Basemap toolkit
with open('IMS1kmLats.24576x24576x1.double', 'rb') as f:
data = np.fromfile(f, dtype='<d', count=24576*24576)
lats = np.reshape(data, [24576, 24576], order='F')
with open('IMS1kmLons.24576x24576x1.double', 'rb') as f:
data = np.fromfile(f, dtype='<d', count=24576*24576)
lons = np.reshape(data, [24576, 24576], order='F')
widths=np.full((24576), 1, dtype=int).tolist()
data=np.array(pd.read_fwf('ims2017312_1km_v1.3.asc', skiprows=30,
widths=widths, lineterminator='\n', header=None))
ご質問ありがとうございますが、残念ながらそれは役に立ちません。緯度と経度は元の極座標投影の2次元配列であるため、単純にスライスしても良いことは起こりません。条件が真であるすべての格子点をチェックする必要があります。 –
はい、サンプルデータは役に立ちました。点がステレオ投影に投影されている場合は、境界線をレポートすることができます同じ投影内のボックス座標 – NaN