Ich habe die maskierte Array-Dokumentation jetzt mehrere Male gelesen, überall gesucht und mich gründlich dumm gefühlt. Ich kann für das Leben in mir nicht herausfinden, wie man eine Maske von einem Array auf ein anderes anwendet.Wie man eine Maske von einem Array auf ein anderes Array anwendet?
Beispiel:
import numpy as np
y = np.array([2,1,5,2]) # y axis
x = np.array([1,2,3,4]) # x axis
m = np.ma.masked_where(y>2, y) # filter out values larger than 5
print m
[2 1 -- 2]
print np.ma.compressed(m)
[2 1 2]
Also das funktioniert gut .... aber diese y-Achse zu zeichnen, muss ich eine passende x-Achse. Wie lege ich die Maske vom Y-Array auf das X-Array an? So etwas wie dies würde Sinn machen, sondern produziert Müll:
new_x = x[m.mask].copy()
new_x
array([5])
So, wie auf der Erde ist, dass done (beachten Sie die neue x-Array muss ein neues Array sein).
Edit:
Nun scheint es eine Möglichkeit, dies funktioniert wie folgt zu tun:
>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> y = np.array([2,1,5,2])
>>> m = np.ma.masked_where(y>2, y)
>>> new_x = np.ma.masked_array(x, m.mask)
>>> print np.ma.compressed(new_x)
[1 2 4]
Aber das ist unglaublich chaotisch! Ich versuche, eine Lösung so elegant wie IDL zu finden ...
Kannst du nicht einfach wie "plot (x, m)" plotten, ohne ein neues_x zu machen? – joris
Und es ist 'new_x = x [~ m.mask] .copy()'. Beachten Sie das '~', da die Maske True ist, wo der Wert maskiert ist. – joris
Nein, ich kann das nicht einfach in einen Plot-Befehl einfügen, weil die Daten vorher massiert werden müssen, also brauche ich wirklich Zugang zu den ausgewählten Daten in mehreren Achsen. – Balthasar