2017-12-19 16 views
0

Ich habe ähnliche Fragen gestellt, aber ich kämpfe immer noch mit der Kombination von Masken.Verwenden von logical_and zum Kombinieren von numpy Masken

Dies ist mein Code:

final_mask = ma.array(np.logical_and(a.mask, b.mask)) 

combined_mask=(ma.array(data, mask=final_mask)) 

data ist das Array ich auf die kombinierte Maske setzen wollen.

Wenn ich die kombinierte Maske grafisch darstelle, scheint sie die a.mask ignoriert zu haben, da sie sehr viel höhere Werte zurückgibt, als sie sollte. I.e. etwas über 200 wurde zuvor maskiert, aber es sind bis zu 300 hier.

a.mask und b.mask wurden bereits definiert und überprüft, so denke ich, es ist die Kombination, die das Problem ist. Sie geben beide Ganzzahlen zurück und nicht true/false Werte, was ist, wonach ich bin.

Danke

Antwort

0

Ihr Vortrag über a.mask ganze Zahlen usw. verwirrend ist. Hier ist ein straight forward Beispiel für die Kombination von Masken

In [346]: data = np.arange(12) 
In [347]: a = np.ma.masked_less(data, 7) 
In [348]: b = np.ma.masked_greater(data,2) 
In [349]: mask = np.logical_and(a.mask,b.mask) 
In [350]: np.ma.array(data, mask=mask) 
Out[350]: 
masked_array(data = [0 1 2 -- -- -- -- 7 8 9 10 11], 
      mask = [False False False True True True True False False False False False], 
     fill_value = 999999) 

I Maskierung am Ende alle Werte> 2 und < 7. a.mask ist boolean.

mit ganzen Zahlen, 0'en falsch sind, alles andere wahre

In [352]: np.logical_and([0,1,2,3],[3,2,1,0]) 
Out[352]: array([False, True, True, False], dtype=bool) 
+0

Hallo, vielen Dank für Ihre Beratung. Es sieht so aus, als ob meine Argumente basierend auf dem, was Sie gesagt haben, korrekt sind. Es ist die Ausgabe der combined_mask, die mich verwirrt hat, da sie alle Werte über 100 maskiert haben sollte, aber nicht. Dies ist ein Abschnitt des Arrays, die ich von der combined_mask erhalten: [- - - - - - - - - - - - - - - - - - - - - - - 250 250 250 250 250 250 250 250 250 250 250 46 46 66 81 81 78 250 250 250] – JaneOz

+0

Ich habe das jetzt behoben - stellt sich heraus, dass ich nicht brauche nicht die erste Codezeile. combined_mask = ma.array (a.mask, mask = b.mask) – JaneOz

Verwandte Themen