Ihre x
ist 3x2 :
In [379]: x
Out[379]:
array([[1, 2],
[2, 3],
[3, 4]])
einen 3 Element boolean Maske Marke:
In [380]: rowmask=np.array([False,False,True])
Das kann verwendet werden, um die Zeilen auszuwählen, in denen es True ist oder wo es False ist. In beiden Fällen ist das Ergebnis 2d:
In [381]: x[rowmask,:]
Out[381]: array([[3, 4]])
In [382]: x[~rowmask,:]
Out[382]:
array([[1, 2],
[2, 3]])
Dies ist ohne Verwendung der MaskedArray-Unterklasse. Um ein solches Array zu erstellen, benötigen wir eine Maske, die in ihrer Form x
entspricht. Es ist nicht vorgesehen, nur eine Dimension zu maskieren.
In [393]: xmask=np.stack((rowmask,rowmask),-1) # column stack
In [394]: xmask
Out[394]:
array([[False, False],
[False, False],
[ True, True]], dtype=bool)
In [395]: np.ma.MaskedArray(x,xmask)
Out[395]:
masked_array(data =
[[1 2]
[2 3]
[-- --]],
mask =
[[False False]
[False False]
[ True True]],
fill_value = 999999)
Anwenden compressed
den Array erzeugt ein raveled: array([1, 2, 2, 3])
Da Maskierung durch Element-Element, ist es ein Element in der Zeile 1, 2 in Zeile 2 usw. So im allgemeinen compressing
maskieren könnte, das Entfernen von maskierte Elemente, ergibt kein 2d-Array. Die abgeflachte Form ist die einzige allgemeine Wahl.
np.ma
macht am meisten Sinn, wenn es eine Streuung von maskierten Werten gibt. Es ist nicht von großem Wert, wenn Sie ganze Zeilen oder Spalten auswählen oder deren Auswahl aufheben möchten.
===============
Hier sind weitere typische maskierte Arrays:
In [403]: np.ma.masked_inside(x,2,3)
Out[403]:
masked_array(data =
[[1 --]
[-- --]
[-- 4]],
mask =
[[False True]
[ True True]
[ True False]],
fill_value = 999999)
In [404]: np.ma.masked_equal(x,2)
Out[404]:
masked_array(data =
[[1 --]
[-- 3]
[3 4]],
mask =
[[False True]
[ True False]
[False False]],
fill_value = 2)
In [406]: np.ma.masked_outside(x,2,3)
Out[406]:
masked_array(data =
[[-- 2]
[2 3]
[3 --]],
mask =
[[ True False]
[False False]
[False True]],
fill_value = 999999)
Ah ich sehe, also was ich versuchte, funktioniert, ich kann es nur nicht komprimieren. Hm. Gibt es eine Möglichkeit, maskierte Elemente eines Arrays zu entfernen, ohne die Dimensionalität des Arrays zu verlieren? 'np.ma.compressed()' tut beides. – Anonymous
Ich mache auch nicht viel über maskierte Arrays, wahrscheinlich das gleiche Niveau wie du. Ich versuche nur, es zum Laufen zu bringen. Nun, wenn Sie versuchen, Elemente zu entfernen, denke ich, Logik-Index ist kein schlechter Weg. – Psidom