2010-07-16 16 views
5

Okay, extreme Anfängerfrage hier. In meinem Programm erzeuge ich ein zweidimensionales numpy Array, von dem einige Einträge fehlen (nicht die "nan" Art von nicht-existent, sondern die "None" Art oder NoneType). Ich würde gerne eine Maske über diese Einträge legen, aber es scheint mir ein paar Probleme zu haben. Normalerweise zu maskieren über, sagen wir, alle Einträge mit dem Wert 2, ISuche nach fehlenden Werten in einem Array

A = np.ma.masked_where tun würde (A [A == 2], A)

In diesem Fall doesn, dass Es scheint mir egal zu sein, was ich für den ersten Parameter versuche. Gedanken?

Antwort

5

Da Sie -- Einträge in Ihrem Array haben, denke ich, dass es bedeutet, dass sie bereits maskiert sind:

>>> m = ma.masked_where([True, False]*5, arange(10)) 
>>> print m 
[-- 1 -- 3 -- 5 -- 7 -- 9] 

Also, ich würde sagen, dass Ihre Eingaben sind bereits maskiert und dass Sie direkt Ihr Array verwenden können .

Wenn Sie ein Array erstellen möchten, die nur die nicht-maskierte Wert enthält, können Sie tun

>>> m[~m.mask] 
[1 3 5 7] 

wo m Ihre maskierte Array ist.

Wenn Sie die Liste der maskierten Werte haben wollen, können Sie einfach die anderen Werte auswählen:

>>> m[m.mask] 
[0 2 4 6 8] 

Beachten Sie, dass die fehlenden Werte sind nicht Keine, aber sind die ursprünglichen Werte im Allgemeinen. In der Tat kann ein Array von Ganzzahlen keine Keine enthalten.

Wenn Sie die Indizes der maskierten Werte möchten, können Sie tun:

>>> numpy.nonzero(m.mask) 

Die documentation von numpy.nonzero() beschreibt, wie das Ergebnis interpretiert werden müssen.

+0

Guter Punkt. Nach mehr Nachforschungen sehe ich, dass Sie Recht haben. Die Werte, die eigentlich das Problem sind, scheinen diejenigen zu sein, die ich vorher nicht bemerkt habe, die eigentlich "None" sind. Also, jetzt werde ich die Frage zu dem ändern, was es hätte sein sollen: Wie gehst du vor, die "None" -Werte zu finden? A [A == None] gibt nur A [0 ,:] aus irgendeinem Grund. – user391045

+0

Ich fügte weitere Informationen in meine Antwort ein: Ich hoffe, dass Sie finden, was Sie darin brauchen! :) – EOL

+0

@ dave-schultz: Wenn deine Rückmeldung in deinem Kommentar oben eine klarere Aussage der Frage ist, wäre es hilfreich, wenn du deine Frage redigierst, um das zu reflektieren. Viele mehr Leute werden Ihre Frage als Ihr Kommentar hier lesen. – tom10

5

Um die Elemente in einem numply-Array zu finden, die None sind, können Sie numpy.equal verwenden. Hier ein Beispiel:

import numpy as np 
import MA 

x = np.array([1, 2, None]) 

print np.equal(x, None) 
# array([False, False, True], dtype=bool) 

# to get a masked array 
print MA.array(x, mask=np.equal(x,None)) 
# [1 ,2 ,-- ,] 
Verwandte Themen