2016-07-08 67 views
0

Ich habe die folgenden. maskiertes Array in numpy genannt arr mit Form (50, 360, 720):Werte im maskierten Nummernfeld ersetzen funktioniert nicht

Es hat die fol. Daten in 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. ist der missing_value und ich möchte ihn durch 0.0 ersetzen. Ich mache das:

arr[arr == -999.] = 0.0 

Arr bleibt jedoch gleich nach dieser Operation. Wie behebe ich das?

+0

Möglicherweise haben Sie die 'Daten' für das Array geändert, aber Sie haben die Maske nicht geändert. – hpaulj

+0

danke @hpaulj, wie kann ich es beheben? – user308827

+0

Ich hatte versucht mit ma.set_fill_value, aber das schien auch nicht zu funktionieren – user308827

Antwort

1

Vielleicht möchten Sie filled. Ich werde zeigen:

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]) 

In diesem Fall filled ersetzt alle maskierten Werte mit einem Füllwerts. Ohne ein Argument würde es die fill_value verwenden.

np.ma verwendet diesen Ansatz, um viele seiner Berechnungen durchzuführen. Zum Beispiel seine sum ist das gleiche, als ob ich alle maskierten Werte mit 0 prod gefüllt würden sie mit 1.

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

Das Ergebnis filled ist eine regelmäßige Anordnung ersetzen, da alle maskierten Werte mit etwas ersetzt worden " normal'.