2016-06-17 4 views
0

(len(緯度)、len(経度))の形のグローバル分散変数を使用して、関心領域に対応するサブセットを取得したい。2つのコーナーで2次元配列のサブセットを選択する最も簡単な方法

特定の領域は、2つのコーナー(左下の緯度/経度、右上の緯度/経度)で定義されます。だから、この配列は、私が今持っているものです。

  • VALUEロン

  • グローバルな分布を表す2次元配列は(-180.0、179.875)所有しているから、1次元配列です2880要素

  • 緯度は、(-90,89.875)の1440要素を1次元配列にしたものです。

  • llcrnrlatなどがロン又は緯度に含まなくてもよいことを通知llcrnrlat、urcrnrlat、llcrnrlon、urcrnrlon = 15、50、90、150

、I「ができ

VALUE_SELECT = VALUE[np.where(Lat ==llcrnrlat):np.where(Lat ==urcrnrlat), 
         np.where(Lon ==urcrnrlat):np.where(Lon ==urcrnrlat)] 

したがって、私の試みは、最も近い値の指標を見つけることを目指してLatとLonをループすることです。

def find_nearest(array,value): ## This function was clipped from website 
    idx = (np.abs(array-value)).argmin() 
    return array[idx] 
llcrnrlon,urcrnrlon = 90,150 
llcrnrlat, urcrnrlat = 15, 50 

nx_st = np.where(lon == (find_nearest(lon,llcrnrlon)))[0] 
nx_en = np.where(lon == (find_nearest(lon,urcrnrlon)))[0] 
ny_st = np.where(lat == (find_nearest(lat,llcrnrlat)))[0] 
ny_en = np.where(lat == (find_nearest(lat,urcrnrlat)))[0] 

lon_select,lat_select = lon[nx_st:nx_en+1], lat[ny_st:ny_en+1] 
value_select =VALUE[ny_st:ny_en+1,nx_st:nx_en+1]  

した後、右ここに警告があり、これらのサブルーチンを実行します。

/Users/anaconda/lib/python2.7/site-packages/ipykernel/ メインの.py:1: VisibleDeprecationWarning:

:ndimと配列変換> 0インデックスは、将来 場合名 ==「メイン」でエラーになります
  • この警告または間違いのを避けるには?
  • 私の場合に基づいて2次元配列のサブセットを取得する簡単な方法はありますか?
+0

値は 'Lon'と' Lat'で均等に分布していますか? 「はい」の場合は、配列内でインデックスを検索する必要はありません。単なる丸め(1439 *(llcrnrlat + 90)/ 179.875)たとえば、 – tschundler

+0

はい、値は均等に分布しています。 –

答えて

1

find_nearest + np.whereは、値が均等に分散されていると完全に不要な計算作業です。あなたはそのコードが何をしているのか本当に理解していますか?それらの機能のそれぞれについて読んでください。配列のすべての値に対して減算を行い、そのオフセットの最小値のインデックスを見つけます。次に、その最小値で値を調べます。次に、値を使用して、配列内のすべての値を調べ、一致するかどうかをテストして、True/False値の新しい配列を作成します。次に、その配列をソートし、Trueのインデックスを探します。 argmin()

それぞれの緯度/経度は8つのセクションに分割されています。だから、8倍にするだけでいいですよね?次に整数にすると、自動的に適用されます。floor()

function lat_conv(y): 
    return int((y + 90) * 8) 
function lon_conv(x): 
    return int((x + 180) * 8) 

value_select = VALUES[lon_conv(start_lon):lon_conv(stop_lon), 
         lat_conv(start_lat):lat_conv(stop_lat)] 
+0

あなたの答えをありがとう。私はそれが複雑すぎると思った –

関連する問題