2017-06-05 2 views
1

Ich möchte genau ein Element in jeder Zeile eines zweidimensionalen Array dekrementieren, mit einigen Indizes, einer für jede Zeile. Also im Grunde möchte ich folgendes vektorisiert werden:Ändern Sie ein Element in jeder Zeile eines numpy Array nach Spaltenindizes

for row, col in enumerate(indices): 
    array[row,col] -= 1 

Ich kann die Elemente auswählen, die ich ändern möchten numpy.choose verwenden, aber dann leider nur die Elemente kopiert werden. Oder mit anderen Worten, so etwas wie das funktioniert nicht:

selection = np.choose(indices, array.T) 
selection -= 1 

Antwort

1

Verwenden integer array indexing für einen vektorisierten Zugriff und damit Zuordnung -

array[np.arange(len(indices)), indices] -= 1 
+0

kühlen. Ich schätze, wir können den Bereich nicht loswerden. – purefanatic

+0

Nein, wir können es nicht loswerden. Ein solches Range-Array zu erstellen, ist nicht wirklich teuer. – Divakar

Verwandte Themen