Trova una data riga in una matrice

Ho una matrice per matrice in MATLAB , diciamo M. Ho un vettore di riga n-elemento, cioè una matrice di colonne per n, dire X.

So che X è una riga da qualche parte in M. Come posso trovare l’indice in M?

MODIFICARE:

Il suggerimento di gnovice è ancora più semplice del mio:

 [~,indx]=ismember(X,M,'rows') indx = 3 

PRIMA SOLUZIONE:

Puoi farlo facilmente usando find ed ismember . Ecco un esempio:

 M=magic(4); %#your matrix M = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 X=[9 7 6 12]; %#your row vector find(ismember(M,X),1) ans = 3 

Prima che ismember conoscenza di ismember , ero solito fare:

 index = find(all(bsxfun(@eq, M, X), 2)); 

Ma usare ismember(X, M, 'rows') è decisamente preferibile.

Un’altra soluzione che restituisce un indice di riga per ogni occorrenza di X è

 find(sum(abs(M-ones(rows(M),1)*X),2)==0) 

Inoltre, questa soluzione può essere facilmente adattata per trovare le righe che si trovano entro la soglia di X come segue (se il disturbo numerico è un problema)

 tolerance = 1e-16; %setting the desired tolerance find(sum(abs(M-ones(rows(M),1)*X),2) 

Questa è una versione senza loop. È adatto solo se M (la tua matrice) non è molto grande, cioè. n e m sono piccoli. X è la tua riga:

 function ind = findRow(M,X) tmp = M - repmat(X,size(M,1),1); ind = find(tmp,1); end 

Se M è troppo grande, potrebbe essere più veloce, per scorrere le righe di M e confrontare ogni riga con il vettore.

@ Modifica: variabili rinominate per abbinare i nomi utilizzati nella domanda.