私は大域的な緯度と経度を持つ大きなデータセットを持っています。しかし、私は特定の地域を見るだけに興味があるので、この地域の外にあるすべての緯度/経度を除外したいと思います。問題は、データを解析するif文を使用していますが、時間がかかりすぎるということです。これを達成するためのより速い方法がありますか?大きなデータセットをすばやくフィルタリングするにはどうすればよいですか?
データはnetCDFファイルから得られ、辞書に格納することができます。私は北緯10度から北緯80度の間の緯度と、-170度から-50度の間の経度しか必要としません。これまで私が試したことは次のとおりです。
ret_dict = {}
with Dataset(filename,'r') as fid:
ret_dict['time'] = fid.variables['timeObs'][:]
sort_order = np.argsort(ret_dict['time'])
lat1 = [i for i in fid.variables['latitude'][:][sort_order] if fid.variables['latitude'][:][sort_order] > 10 ]
lat2 = [i for i in lat1 if lat1 < 80]
上記のコードは、経度に対して繰り返すことができます。しかし、これは大量のデータでは遅すぎます。それは私に指数を与えないので、私は元の緯度と経度のペアを維持することを確認します。すべての変数のデータをすばやく切り詰めるにはどうすればよいですか?
編集:以下の答えは質問の最初の部分では正しいですが、フィルタリングされた緯度のインデックスを使用して他の変数も切り捨てようとしています。私がしようとしています:
lon = [j for i,(j,i) in zip(fid.variables['longitude'][:],fid.variables['longitude']) if 10<i<80]
は、しかし、私はエラーを取得しています:***はTypeError:「numpy.float32」オブジェクトは、あなたのデータをソート必要何らかの理由がある
これは前に回答されていますhttp://stackoverflow.com/questions/29135885/netcdf4- 35320631#35320631 – N1B4