2017-12-17 3 views
3

Einfache Frage, ich möchte ein 1D numpy Array erhalten.Python 2D Numpy Array zu 1D (Art von ..)

einen 2D-Array gegeben, wobei jede Reihe einen einzelnen ‚1‘ Wert enthält, wie es zu einem 1D-Array umgewandelt werden, das aus dem Spaltenindex der ‚1‘ in dem 2D-Array

[[ 0. 0. 1.] 
[ 0. 0. 1.] 
[ 0. 0. 1.] 
[ 0. 1. 0.] 
[ 0. 1. 0.] 
[ 0. 1. 0.] 
[ 0. 1. 0.] 
[ 1. 0. 0.]] 

zu

[2 2 1 1 1 1 0] 

Wie würde ich es in Python tun? Ich kenne die Terminologie dafür nicht, lassen Sie mich die richtigen Bedingungen für eine solche Transformation wissen.

+1

Suchen Sie nach 'numpy.argmax'. – Divakar

Antwort

5

Sie suchen für den Index mit dem Maximalwert entlang der ersten Achse:

>>> a.argmax(axis=1) 
array([2, 2, 2, 1, 1, 1, 1, 0]) 

a.argmax(axis=None, out=None)

Return Indizes des Maximalwertes entlang der vorgegebenen Achse.

Wenn die anderen Werte nicht unbedingt kleiner als eins sind, filtern Sie zuerst nach 1. Dies ergibt ein Array von True und False Werten. Verwenden Sie nun argmax():

>>> (a == 1).argmax(axis=1) 
array([2, 2, 2, 1, 1, 1, 1, 0]) 

True wirkt wie ein 1 und False wie ein 0, weil bool erbt von int.

0

Scheint so, als ob Sie den Hot-Index eines einzigen kodierten Vektors für jede Zeile erhalten möchten.

Dies könnte wie folgt:

  1. Multiplizieren Sie Ihre Matrix mit einem Vektor [0 1 2] oder mehr generic: numpy.arange(matrix.shape[1])
  2. fassen Sie Ihre Matrixzeilen: numpy.sum(matrix, axis=1)

numpy Arrays haben auch die Funktion argmax, die zum selben Ergebnis führt.

0

Sie können es numpy argmax wie folgt verwendet tun:

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