2017-04-01 1 views
1

wenig schwierig es mit wenigen Worten zu erklären (und Google es), so:Python - Verwenden Sie Werte von 1D-Array als Spaltenindizes für 2D-Array

ich diesen 2D-np Array:

import numpy as np 

x = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11],[12,13,14],[15,16,17]]) 

und dieser 1D np Array:

y = np.array([0,2,1,0,2,0]) 

, was ich tun möchte, ist den Spaltenwert zurück von x mit y als (Spalte) Index, so wird es so etwas wie dies zurück:

for row,col in zip(x,y): 
    print(row[col]) 

und in einem nicht-so-ugly Code:

[0, 5, 7, 9, 14, 15] 

in hässlich-Code würde es so gelöst werden

[row[col] for row,col in zip(x,y)] 

Gibt es eine andere Möglichkeit, dies lösen? Ich möchte etwas wie:

x[y] 

oder eine bestimmte Funktion numpy.

Antwort

1

können Sie erweiterte Indizierung verwenden:

x[np.arange(6), y] 
# array([ 0, 5, 7, 9, 14, 15]) 
+0

Vielen Dank, das vollkommen schön gearbeitet :) – JackS

0

Ja, es ist besser, es mit numpy zu tun, weil es mehrmals schneller ist, als es mit for-Schleife zu tun. Was ich vorschlagen, ist das Array mit np.ix_() Funktion in Scheiben schneiden und diagonal des Ergebnisses nimmt aus jeder Zeile von Wert zu erhalten:

np.diag(x[np.ix_(range(0, np.shape(x)[0]), y)])

Verwandte Themen