2016-09-07 2 views
0

netCDFファイルから指定された緯度と経度を抽出します。過去に私はデータの抽出に問題は一度もありませんでした。指定された緯度と経度を抽出するときのインデックスの問題

us_lat = n.ravel(n.where((lat>=___)&(lat<=___))) 
us_lon = n.ravel(n.where((lon>=___)&(lon<=___))) 
us_annual_temp = n.nanmean(air_temp[:,us_lat, us_lon],0) 

この時間:私は以前、私は次の操作を行うことができました

data = netCDF4.Dataset('/home/eburrows/metr173/regional_cm/Lab1/air.mon.mean.nc', mode = 'r') 
lat = data.variables['lat'][:] #90 through -90 
lon = data.variables['lon'][:] #0 through 360 
air_temp = data.variables['air'][:] #degrees C 
air_temp[air_temp>10000] = n.NaN 

(下記参照)私は違った自分のデータを読み込むので、それは、この時間は働いていない理由があると仮定していますしかし、それはlist indices must be integers, not tupleというType Errorを返しています。

私はその後list(n.ravel(n.where(...))を持っているus_latus_lonを変更することにより、listtupleを余儀なくが、それはまだ同じエラーを返します。過去に私はこの方法でインデックスを作成することができましたが、今度はなぜこれが動作していないのか完全にはわかりません。

答えて

0

whereコマンドのlat_usの結果は、スライスair_tempに必要な実際のインデックスではなく、インデックスのタプルです。これを修正するには、lat_usの最初の結果にインデックスを付けて、緯度インデックスの配列にアクセスする必要があります。例えば

>>> import numpy as np 
>>> lat = np.arange(-90,91,10) 
>>> lat 
array([-90, -80, -70, -60, -50, -40, -30, -20, -10, 0, 10, 20, 30, 
    40, 50, 60, 70, 80, 90]) 
>>> lat_us = np.where((lat >= -30) & (lat <= 30)) 
>>> lat_us 
(array([ 6, 7, 8, 9, 10, 11, 12]),) 
>>> lat_us[0] 
array([ 6, 7, 8, 9, 10, 11, 12]) 

ので

us_lat = n.ravel(n.where((lat>=___)&(lat<=___))) 

ラインが(注:私はあなたがこのいずれかをラヴェルする必要はないと思う):に変更する必要があり

us_lat = n.where((lat>=___) & (lat<=___))[0] 

また、現在変数air_tempの1次元のみを読み込んでいますが、3D(時間xラットxロン)。したがって、この変数の読み込みを変更して、3つのディメンションをすべて含める必要があります。

air_temp = data.variables['air'][:,:,:] 
+0

残念ながら、これらの変更では、同じエラーメッセージが返されました。私もravelやlist関数を使わずに試しましたが、どちらのオプションもうまくいきませんでした。私が試した他の試みは次のようになります:us_lat = list(n.ravel(n.where((lat> = ____)&(lat <= ___))[0]))またはus_lat = n.ravel (lat> = ____)&(lat <= ___))[0]) –

+0

'lat_us'と' lon_us'の結果はどうですか?それらはインデックスの配列でなければなりません。これは 'type(lat_us)'でチェックすることができ、 '' – N1B4

+0

を返す必要があります。他のバグを修正した後、コード内で型が返されます

関連する問題