Value dependant sort of matrix rows

Hi,
I have a integer matrix which I know each row contain a certain value.
I would like to sort each row of that matrix in the way this value will always be in front / first position of the row.
The other values order doesn't matter.
For example with a constant value equal to 8 :
M8 = [7 8 5;...
8 7 3;...
4 8 3;...
5 8 4];
I would like in return of such a function
sorted_M8 = [8 7 5;...
8 7 3;...
8 4 3;...
8 5 4];
What is the quickest way to do this in Matlab ?
Thank you, best.
Nicolas

 Respuesta aceptada

David Hill
David Hill el 3 de Abr. de 2020
sorted_M8=M8';
sorted_M8(ismember(M8',8))=M8(:,1);
sorted_M8=sorted_M8';
sorted_M8(:,1)=8;

3 comentarios

Nicolas Douillet
Nicolas Douillet el 3 de Abr. de 2020
Editada: Nicolas Douillet el 3 de Abr. de 2020
Ok, pretty good, thank you. I also had a similar solution :
Mt = M8';
f = Mt ~= 8;
M8 = Mt(f(:));
M8 = cat(2,8*ones(size(Mt,2),1),reshape(M8,[2,size(Mt,2)])'); % 2 because I forgot to say size(T,2) = 3 always
but still keeping the hope this could be done in one single line of code.
Two lines.
sorted_M8=ismember(M8,8).*M8(:,1)+~ismember(M8,8).*M8;
sorted_M8(:,1)=8;
Nicolas Douillet
Nicolas Douillet el 3 de Abr. de 2020
Yeah good, thanks again. The only thing I try to avoid in general is to mix logical class objects with double class objects in computation.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Productos

Versión

R2019b

Preguntada:

el 3 de Abr. de 2020

Comentada:

el 3 de Abr. de 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by