# Value dependant sort of matrix rows

2 views (last 30 days)
Nicolas Douillet on 3 Apr 2020
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

David Hill on 3 Apr 2020
sorted_M8=M8';
sorted_M8(ismember(M8',8))=M8(:,1);
sorted_M8=sorted_M8';
sorted_M8(:,1)=8;

Nicolas Douillet on 3 Apr 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.
David Hill on 3 Apr 2020
Two lines.
sorted_M8=ismember(M8,8).*M8(:,1)+~ismember(M8,8).*M8;
sorted_M8(:,1)=8;
Nicolas Douillet on 3 Apr 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.