2016-07-08 3 views
0

私はfollを持っています。シェイプ(50,360,720)を持つarrというnumpyのマスクされた配列:マスクされたnumpy配列の値を置き換えないでください

masked_array(data = 
[[-- -- -- ..., -- -- --] 
[-- -- -- ..., -- -- --] 
[-- -- -- ..., -- -- --] 
..., 
[-- -- -- ..., -- -- --] 
[-- -- -- ..., -- -- --] 
[-- -- -- ..., -- -- --]], 
      mask = 
[[ True True True ..., True True True] 
[ True True True ..., True True True] 
[ True True True ..., True True True] 
..., 
[ True True True ..., True True True] 
[ True True True ..., True True True] 
[ True True True ..., True True True]], 
     fill_value = 1e+20) 

フォールドがあります。 arr [0]のデータ:

arr[0].data 

array([[-999., -999., -999., ..., -999., -999., -999.], 
     [-999., -999., -999., ..., -999., -999., -999.], 
     [-999., -999., -999., ..., -999., -999., -999.], 
     ..., 
     [-999., -999., -999., ..., -999., -999., -999.], 
     [-999., -999., -999., ..., -999., -999., -999.], 
     [-999., -999., -999., ..., -999., -999., -999.]]) 

-999 missing_valueは0.0で置き換えたいです。私はこれを行う:

arr[arr == -999.] = 0.0 

しかし、この操作後もarrは変わらない。これを修正するには?

+0

配列の 'data'を変更したかもしれませんが、マスクは変更していません。 – hpaulj

+0

ありがとう@hpaulj、どうすれば修正できますか? – user308827

+0

私はma.set_fill_valueを使ってみましたが、どちらもうまくいかないようです – user308827

答えて

1

おそらくfilledが必要です。私が説明します:この場合filled

In [702]: x=np.arange(10)  
In [703]: xm=np.ma.masked_greater(x,5) 

In [704]: xm 
Out[704]: 
masked_array(data = [0 1 2 3 4 5 -- -- -- --], 
      mask = [False False False False False False True True True True], 
     fill_value = 999999) 

In [705]: xm.filled(10) 
Out[705]: array([ 0, 1, 2, 3, 4, 5, 10, 10, 10, 10]) 

は、充填値を持つすべてのマスクされた値を置き換えます。引数がなければ、fill_valueを使用します。

np.maは、このアプローチを使用して多くの計算を実行します。例えば、そのsumは、すべてのマスクされた値が何か 'で置き換えられているので、filledの結果は、規則的な配列である1

In [707]: xm.sum() 
Out[707]: 15 
In [709]: xm.filled(0).sum() 
Out[709]: 15 

に置き換えるだろう、私は0 prodですべてのマスクされた値を満たした場合と同じです「正常」である。

関連する問題