2016-10-31 7 views
0

Etwas ist falsch in meinem Skript und ich fand den Fehler, aber ich bin völlig fest.Python Indizierung und zuweisen von Zeile NDARRAY

besteht Array B, das zwei Elemente enthält:

b = np.zeros ((1,2)) 

b[0,0] = 272 
b[0,1] = 1578 

Ich möchte, überprüfen, ob es Elemente in den zweiten Spalten sind, größer als ein Wert ist, und wenn dem so ist, zuweisen dieser Wert eine Null ist.

der Befehl

b[ b[:,1] >= 1000 ] = 0 

beide Elemente auf 0 statt b[0,1]

was ich vermisst von ändert?

Dank im Voraus

C

Antwort

0

Wenn ich Sie richtig verstehe, Sie wollen nur die zweite Spalte auf Null setzen (wenn sein Wert> 1000)? Ich verlängerte Ihr Beispiel mindestens zwei Reihen haben, aber nur getestet es mit einem auch zu arbeiten.

b = np.array([[123, 456], 
       [789, 101112]]) 
mask = b[:,1] > 1000 
b[mask,1] = 0 

print b 

I mask definiert es besser zu erklären - Sie können es in substituieren kann mask ist dann ein boolean Vektor mit ein Element für jede Zeile, in diesem Fall [False, True]. Im letzten Schritt wird diese mask verwendet, um die ausgewählten Zeilen auszublenden und dem ersten Spaltenelement eine Null zuzuordnen.

+0

Ja, ich möchte das Element in der zweiten Spalte auf Null setzen, wenn dieses Element größer als ein Wert ist, z. größer als 1000 danke! – Christoph

0

Ich glaube, Sie Schleife über b könnte?

b_rows = 1 #number of your rows 
for i in range(b_rows): 
    if b[i,1] >= 1000: 
     b[i,1]=0