2017-07-31 1 views
0

データセットprecip_subsetには3つの1D numpy配列があります。私はprecip_subsetを作成するために31のデータセットをマージしました。データセットの最初のnumpy arrrayは曜日を表し、2番目の配列は経度を表し、thrid配列は緯度を表します。データセットの各位置で降水量に固有の値があります。たとえばprint(precip_subset[1, 0, 21])は私に1.05という値を与えます。1つのnumpy配列を持つデータセット内の値の位置を取得する

precip_subsetでは、私は降水量の特定の値しか求めませんでした。だから私はそうのようなデータセットを限定:この後

data_low = precip_subset[(precip_subset > 0) & (precip_subset < 3.86667)] 

、私はこれを実行しようとしました:

for val in data_low: 
    if val < 1: 
     print(precip_subset.tolist().index(val)) 

私がやろうとしていますどのような元のデータセット内の値の位置を取得している、precip_subset 。しかし、私はThe truth value of an array with more than one element is ambiguous. Use a.any() or a.all()というエラーが出ます。誰も私がprecip_subsetから値の位置を得る方法を説明することはできますか?

EDIT:ここprecip_subsetが作成された方法である。

from netCDF4 import Dataset 
import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.basemap import Basemap 

data_path = r"C:\Users\matth\Downloads\TRMM_3B42RT\3B42RT_Daily.201001.7.nc4" 
f = Dataset(data_path) 

latbounds = [ -31 , -19 ] 
lonbounds = [ 131, 146 ] # degrees east ? 
lats = f.variables['lat'][:] 
lons = f.variables['lon'][:] 

# latitude lower and upper index 
latli = np.argmin(np.abs(lats - latbounds[0])) 
latui = np.argmin(np.abs(lats - latbounds[1])) 

# longitude lower and upper index 
lonli = np.argmin(np.abs(lons - lonbounds[0])) 
lonui = np.argmin(np.abs(lons - lonbounds[1])) 

precip_subset = f.variables['precipitation'][ : , lonli:lonui , latli:latui ] 

変数 "沈殿" は、元のデータセットからr"C:\Users\matth\Downloads\TRMM_3B42RT\3B42RT_Daily.201001.7.nc4"

ある、precip_subsetの形状及び大きさは、それぞれ(31, 60, 48)89280

あります
+0

それはどのように非常に明確ではありません'precip_subset'が作成されました...それは3つの1D配列をかしめて作成したものは何ですか?これは、 'precip_subset'が3D配列であることを示す使用例' precip_subset [1、0、21]) 'と矛盾する2D配列になります。したがって、 'precip_subset'配列の形を明確にしてください。 –

+0

私はコード全体を投稿します。 –

+0

私はあなたのデータを表すnumpyデータ配列の小さな例を作成することがより役に立ちそうです。あなたの例では、データがあなたのファイルにどのように配置されているかは分かりません。あなたの質問に答えるために 'netCDF4'に慣れている必要があります。 –

答えて

0

次のように試してみることができます(あなたの例から考えてみてください):

data_low_indices1 = np.where((precip_subset > 0) & (precip_subset < 3.86667)) 

これは、条件が成立するインデックスの1D配列のタプルを返します。あなたはこのリストを移調することもできます。

data_low_indices2 = np.array(np.where((precip_subset > 0) & (precip_subset < 3.86667))).T 

その後、次のことができます。

for ind in data_low_indices2: 
    print(ind) 

あなたが移調したくない場合は、次の操作を行います。

for ind in zip(*data_low_indices1): 
    print(ind) 
+0

ありがとう! –

関連する問題