2017-12-16 5 views
0

Ich habe eine Maske über einem Vektor Shapefile erstellt und dann eine andere erstellt, die in den relevanten Bereich zoomt. Das Problem, das ich mit dieser neuen Maske habe, ist, dass der maskierte Bereich das Bit ist, das ich möchte, also muss ich es irgendwie invertieren. (Bitte beachte, dass ich numpy als np importiert)Wie invertiere ich ein maskiertes numpy Array?

Dies ist der Code, den ich für die zweite Maske verwendet:

catchment_mask = gmask[minrow:minrow+nrow, mincol:mincol+ncol] 
catchment_mask = np.where(catchment_mask == 1, 1., np.nan) 

Ich habe versucht, diesen Code verwenden es zu invertieren, aber es hat eine Anwendung Maske auf die gesamte Fläche:

inverse_catchment_mask = (np.logical_not(catchment_mask)) 

Ich wäre wirklich dankbar für Anregungen!

+0

Ihre Einrückung ist deaktiviert. Es gibt eine 'np.ma', MaskedArray-Unterklasse, aber ich glaube nicht, dass Sie das haben. Es sieht so aus, als ob Ihre 'Maske' ein Stück' gmask' ist, aber dann erstellen Sie ein neues Array mit 'where'. Warum? Das ist keine Sicht mehr. Warum der 'np.nan'? 'logic_not' davon ist' False'. – hpaulj

Antwort

0

Wenn Ihr cachement_mask von boolean bestand (True/False) Werte, dann Lösung, die Sie basierend auf logical_not würde als

erwartet funktionieren

Aber Ihre Maske besteht aus 1 oder NaN, so können Sie dies sorgfältig umkehren müssen. Zum Beispiel:

inverse_cachement_mask = np.where(np.isnan(cachement_mask), 1, np.nan) 

Dies wird eine inverse Ihrer ursprünglichen Maske, Vertauschen der 1 und NaN Werte erstellen.

+0

Danke für die Erklärung. Ich entfernte die np.where und änderte sie für logical_not mit den relevanten Argumenten und es hat es wie erwartet mit booleschen Werten invertiert. – JaneOz

Verwandte Themen