titles - title matlab
Encuentra la fila dada en una matriz (4)
EDITAR:
La sugerencia de gnovice es incluso más simple que la mía:
[~,indx]=ismember(X,M,''rows'')
indx =
3
PRIMERA SOLUCIÓN:
Puedes hacerlo fácilmente usando find
y ismember
. Aquí hay un ejemplo:
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
Tengo una matriz m por n en MATLAB
, digamos M. Tengo un vector de fila de n elementos, es decir, una matriz de uno por n columna, digamos X.
Sé que X es una fila en algún lugar de M. ¿Cómo puedo encontrar el índice en M?
Antes de saber de ismember
, solía hacer:
index = find(all(bsxfun(@eq, M, X), 2));
Pero usar ismember(X, M, ''rows'')
es definitivamente preferible.
Esta es una versión sin bucle. Solo es adecuado si M (su matriz) no es muy grande, es decir. n y m son pequeños X es tu fila:
function ind = findRow(M,X)
tmp = M - repmat(X,size(M,1),1);
ind = find(tmp,1);
end
Si M es demasiado grande, podría ser más rápido, iterar las filas de M y comparar cada fila con su vector.
@ Edite: las variables renombradas para que coincidan con los nombres utilizados en la pregunta.
Otra solución que devuelve un índice de fila para cada aparición de X es
find(sum(abs(M-ones(rows(M),1)*X),2)==0)
Además, esta solución se puede adaptar fácilmente para encontrar las filas que están dentro del umbral de X de la siguiente manera (si el ruido numérico es un problema)
tolerance = 1e-16; %setting the desired tolerance
find(sum(abs(M-ones(rows(M),1)*X),2)<tolerance)