2013-09-20 7 views
15

Sono nuovo in numpy e sto implementando il clustering con una foresta casuale in python. La mia domanda è:Array Numpy Ricerca riga di indice per riga

Come posso trovare l'indice della riga esatta in una matrice? Ad esempio

[[ 0. 5. 2.] 
[ 0. 0. 3.] 
[ 0. 0. 0.]] 

e cerco [0. 0. 3.] e ottenere come risultato 1 (l'indice della seconda riga).

Qualche suggerimento? Segue il codice (non funziona ...)

for index, element in enumerate(leaf_node.x): 
     for index_second_element, element_two in enumerate(leaf_node.x): 
      if (index <= index_second_element): 
       index_row = np.where(X == element) 
       index_column = np.where(X == element_two) 
       self.similarity_matrix[index_row][index_column] += 1 
+1

È necessario fornire Short, Self Contained, Correct (Compilable), Esempio http://www.sscce.org/. Per non parlare del fatto che "non funziona" non è una descrizione del problema. – zero323

risposta

39

Perché non fare semplicemente qualcosa del genere?

>>> a 
array([[ 0., 5., 2.], 
     [ 0., 0., 3.], 
     [ 0., 0., 0.]]) 
>>> b 
array([ 0., 0., 3.]) 

>>> a==b 
array([[ True, False, False], 
     [ True, True, True], 
     [ True, True, False]], dtype=bool) 

>>> np.all(a==b,axis=1) 
array([False, True, False], dtype=bool) 

>>> np.where(np.all(a==b,axis=1)) 
(array([1]),) 
+0

Puoi farlo con i caratteri jolly? Dì se il primo "0." sarebbe permesso come "qualsiasi valore"? –

+1

Se ho capito, prova correttamente: 'a [:, 1:] == np.array ([0, 3])' invece di 'a == b'. Quindi, quello che facciamo è solo tagliare la prima colonna e confrontare come mostrato. – Daniel

+0

Ok, quindi i caratteri jolly sono fuori questione. Eccellente chiarimento Grazie –