J'ai une matrice m par n en MATLAB
, disons M. J'ai un vecteur ligne à n éléments, c'est-à-dire une matrice une par n colonnes, disons X.
Je sais que X est une ligne quelque part dans M. Comment puis-je trouver l'index dans M ?
J'ai une matrice m par n en MATLAB
, disons M. J'ai un vecteur ligne à n éléments, c'est-à-dire une matrice une par n colonnes, disons X.
Je sais que X est une ligne quelque part dans M. Comment puis-je trouver l'index dans M ?
la suggestion de gnovice est encore plus simple que la mienne :
[~,indx]=ismember(X,M,'rows')
indx =
3
Vous pouvez facilement le faire en utilisant find
et ismember
. Voici un exemple :
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
Une autre solution qui renvoie un index de ligne pour chaque occurrence de X est
find(sum(abs(M-ones(rows(M),1)*X),2)==0)
De plus, cette solution peut être facilement adaptée pour trouver des lignes qui se trouvent dans le seuil de X comme suit (si le bruit numérique est un problème)
tolerance = 1e-16; %setting the desired tolerance
find(sum(abs(M-ones(rows(M),1)*X),2)<tolerance)
Il s'agit d'une version sans boucle. Cela ne convient que si M (votre matrice) n'est pas très grand, c'est-à-dire. n et m sont petits. X est votre ligne :
function ind = findRow(M,X)
tmp = M - repmat(X,size(M,1),1);
ind = find(tmp,1);
end
Si M est trop grand, il peut être plus rapide d'itérer les lignes de M et de comparer chaque ligne avec votre vecteur.
@Edit : variables renommées pour correspondre aux noms utilisés dans la question.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.