2013-09-23 12 views
7

Say HoCostruire matrice bidimensionale NumPy da indici ei valori di un array monodimensionale

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

Da questo voglio ottenere una matrice X di forma (len(Y), 3). In questo caso particolare, la prima riga di X dovrebbe avere uno sul secondo indice e zero altrowhise. La seconda riga di X dovrebbe avere uno sull'indice 0 e zero altrimenti. Per essere espliciti:

X = np.array([[0, 0, 1], [1, 0, 0], [0, 1, 0], [0, 1, 0]]) 

Come si genera questa matrice? Ho iniziato con

X = np.zeros((Y.shape[0], 3)) 

ma poi non riusciva a capire come popolare/riempire quelli dalla lista degli indici

Come sempre, grazie per il vostro tempo!

+1

Qual è la domanda? – milancurcic

+0

Abbastanza corretto: modificato per chiedere esplicitamente la domanda – cd98

risposta

13

Forse:

>>> Y = np.array([2, 0, 1, 1]) 
>>> X = np.zeros((len(Y), 3)) 
>>> X[np.arange(len(Y)), Y] = 1 
>>> X 
array([[ 0., 0., 1.], 
     [ 1., 0., 0.], 
     [ 0., 1., 0.], 
     [ 0., 1., 0.]]) 
+0

Grazie! Molto leggibile e veloce anch'esso – cd98

1
Y = np.array([2, 0, 1, 1]) 
new_array = np.zeros((len(Y),3)) 
for i in range(len(Y)): 
    new_array[i,Y[i]] = 1 

credo ... io non credo che ci sia un modo più semplice (ma potrei sbagliarmi)

+1

'np.zeros ((len (Y), 3))'. Potrebbe anche voler specificare 'dtype = np.int' come esempio mostra gli interi. –

+0

DSM presenta una risposta migliore: P –

+1

Grazie! Nel caso qualcuno fosse interessato, ho programmato la risposta di @ JoranBeasley e DSM con un array 10000 per 3 e la vettorizzazione fornisce 744 μs per loop su 11.8 ms per loop – cd98

3

Per dare un one-liner alternativa al DSM di perfezione buona risposta:

>>> Y = np.array([2, 0, 1, 1]) 
>>> np.arange(3) == Y[:, np.newaxis] 
array([[False, False, True], 
     [ True, False, False], 
     [False, True, False], 
     [False, True, False]], dtype=bool) 
+0

Vorrei inserire un '* 1' o un' .astype (int) ', ma +1. – DSM

+0

@DSM Il tuo codice è già molto più veloce di questo senza la conversione del tipo ... – Jaime

Problemi correlati