2016-03-23 10 views
3

Ich nehme die Ausgabe von AUTO numerischen Folgepaket, und müssen Ergebnisse filtern, die negative Werte der Variablen haben, da sie nicht physisch sind. Also, wenn ich zum Beispiel:Numpy - lösche Datenzeilen mit negativen Werten

>>> a = np.array([[0,1,2,3,4],[-1,-0.5,0,0.5,1],[-3,-4,-5,0.1,0.2]]) 

Ich mag würde gelassen werden: Aber

>>> b 
array([[ 3. , 4. ], 
     [ 0.5, 1. ], 
     [ 0.1, 0.2]]) 

wenn ich numpy.where versuche ich bekommen:

>>> b = a[:,(np.where(a[1]>=0) and np.where(a[2]>=0))] 
>>> b 
array([[[ 3. , 4. ]], 

     [[ 0.5, 1. ]], 

     [[ 0.1, 0.2]]]) 
>>> b.shape 
(3, 1, 2) 

Das heißt, es fügt eine weitere unerwünschte Achse zum Array. Was mache ich falsch?

+0

Sie Spalten, die durchaus positiv sind, oder? – jrjc

Antwort

6

Unter der Annahme, alles, was Sie tun möchten, ist Spalten zu entfernen, die eine oder mehrere negative Werte haben, können Sie dies tun:

a = np.array([[0,1,2,3,4],[-1,-0.5,0,0.5,1],[-3,-4,-5,0.1,0.2]]) 
b = a[:,a.min(axis=0)>=0] 
1

Wenn das, was Sie wollen voll positive Spalten sind, dann @ Yakym Antwort ist die Art und Weise zu gehen, da es wahrscheinlich schneller ist. wenn es nur ein Beispiel war jedoch, und Sie wollen Schwelle bestimmte Spalten, können Sie es tun, indem sightly modifiziert Ihr Beispiel:

>>> a[:, (a[1] >= 0) & (a[2] >= 0)] 
array([[ 3. , 4. ], 
     [ 0.5, 1. ], 
     [ 0.1, 0.2]]) 

Hier (a[1] >= 0) und (a[2] >= 2) erstellen boolean Maske, die von der & (boolean/logischen zusammengeführt werden und) Operator und verwendet, um das Array zu indizieren a.

Verwandte Themen