私はnetCDF4
がインストールされていないが、それはあなたの変数は多分numpy.ma
マスクされた配列になり、次のようになります文書から表示されます。このコード
try :
model_dry_tropo_corr[i].mask=True
continue
except :
Pass
について困惑しています。
この変数の全部または一部をshapeやdtypeなどの属性で印刷すると便利です。
は、私のような式でマスクされた配列を作ることができます:私は指定された要素のマスクかどうかをテストすることができ
In [746]: M=np.ma.masked_where(np.arange(10)%3==0,np.arange(10))
In [747]: M
Out[747]:
masked_array(data = [-- 1 2 -- 4 5 -- 7 8 --],
mask = [ True False False True False False True False False True],
fill_value = 999999)
場合とFALSE TRUE /:
In [748]: M.mask[2]
Out[748]: False
In [749]: M.mask[3]
Out[749]: True
しかし、最初にI指数であれば、
In [754]: M[2]
Out[754]: 2
In [755]: M[3]
Out[755]: masked
In [756]: M[2].mask=True
...
AttributeError: 'numpy.int32' object has no attribute 'mask'
In [757]: M[3].mask=True
したがって、try/exceptは、マスクがTrueに設定されている要素をスキップします。
しかし、私はそれを行うことが明らかであると思う:
if model_dry_tropo_corr.mask[i]:
continue
しかし、それはまだ反復的です。
しかし、@user3404344
に示されているように、変数を使用して数学を実行できます。マスキングは引き継がれます。マスクされた値が「不良」であり、計算にエラーが発生する場合は、問題になる可能性があります。
私は別のマスクされた配列を定義した場合
In [764]: N=np.ma.masked_where(np.arange(10)%4==0,np.arange(10))
In [765]: N+M
Out[765]:
masked_array(data = [-- 2 4 -- -- 10 -- 14 -- --],
mask = [ True False False True True False True False True True],
fill_value = 999999)
あなたがM
かN
のいずれかでマスクした要素は、私が唯一の有効なを与えることcompressed
方法を使用することができます
結果にマスクされているかを確認することができます要素
In [766]: (N+M).compressed()
Out[766]: array([ 2, 4, 10, 14])
マスクされた配列を使用して数式を計算するときは、埋め込みも便利です。
In [779]: N.filled(0)+M.filled(0)
Out[779]: array([ 0, 2, 4, 3, 4, 10, 6, 14, 8, 9])
私は問題の計算を中和するためにfilled
を使用して、まだそれらの値
In [785]: z=np.ma.masked_array(N.filled(0)+M.filled(0),mask=N.mask|M.mask)
In [786]: z
Out[786]:
masked_array(data = [-- 2 4 -- -- 10 -- 14 -- --],
mask = [ True False False True True False True False True True],
fill_value = 999999)
おっとをマスクすることができ、私は計算をいじりマスクされた値を心配する必要はありません。マスクされたほかは、あなたの質問に全く関係のない私
In [787]: (N+M).data
Out[787]: array([ 0, 2, 4, 3, 4, 10, 6, 14, 8, 9])
In [788]: N.data+M.data # raw unmasked addition
Out[788]: array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
In [789]: z.data # same as the (N+M).data
Out[789]: array([ 0, 2, 4, 3, 4, 10, 6, 14, 8, 9])
ための充填を行っているが、あなたは 'における要素の持つ要素をループすることができます:私たちにあなたがしている実際の動作を'代わりにぎこちなくLEN – Keatinge
の範囲を使用しての表示しますそれをベクトル化しようとすることができます。配列をループで反復することは無駄です。 –
私は質問を編集しようとしました、私はより理解できることを願っています。 – PUJA