2012-03-02 3 views
0

J'ai une matrice A. Je veux trouver tous les éléments uniques est A donc: b = unique (A); vais donner tableau de tous les éléments uniques dans A.trouver des emplacements d'un ensemble d'éléments dans une matrice - Matlab

Je veux trouver les emplacements de ces éléments dans A. Pour être précis, les éléments dans b se répètent dans A et je veux trouver pour chaque élément dans b ses lignes dans A.

Comment on peut le faire sans une boucle?

Répondre

1

La commande devrait vous donner

[b,m,n] = unique(A); 

toutes les données dont vous avez besoin pour répondre à votre question.

0

Voici quelques exemples de code qui fait ce que je pense que vous essayez de faire:

%Test data 
A = [... 
    1 2 3 4; ... 
    4 5 6 7; ... 
    8 1 3 4]; 

%Basic "unique" call 
[B, ix_A, ix_B] = unique(A); 

%Note that the indexes from unique can be used as follows 
isequal(A(ix_A), B) %Returns true 
isequal(B(ix_B), A(:)) %Returns true 

%To find a row (and column) in A where each element in B can be found we 
%just need to convert the linear indexs into row/column subscripts 
[row, column] = ind2sub(size(A), ix_A); 
%  Note that in general, multiple rows will contain each value from A. 
%  This will always produce one of the rows (and columns), pracitcially, 
%  it looks like to returns the last row containing the value. 
+0

Vous pouvez contrôler si l'index retourné est la première ou la dernière occurrence de la valeur en passant « première » ou « dernier 'à la fonction unique. Vous devriez également passer 'row' si vous voulez trouver des lignes uniques plutôt que des éléments uniques. –

+0

Ma compréhension de la question était la valeur unique par élément était souhaitée, pas les lignes uniques. Mais c'est un bon point. Je ne savais pas que 'unique' supportait les mots-clés 'first' et 'last'. C'est un bon conseil. – Pursuit

Questions connexes