Sorting a matrix according to another one
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Mattia Salomone
el 31 de Mayo de 2023
Comentada: Mattia Salomone
el 1 de Jun. de 2023
Dear all,
I have the following problem to solve.
clear
clc
% A matrix defined as follows
A=[11 0.001 3
11 0.001 4
12 0.003 5
9 0.002 6
8 0.000 7
10 0.004 8
8 0.000 9
9 0.002 10];
% B matrix is the reference one
B=[8 0.000
8 0.000
9 0.002
10 0.004
9 0.002
11 0.001
11 0.001
12 0.003];
I want to sort A such that the first two columns coincide with B (and sort the other A column in agreement with this, of course). I used this code, but the problem is that since in B I have repeted conditions the result is not the one I desire.
[~,Y]=ismember(A(:,1:2),B,'rows');
[~,Z]=sort(Y);
C=A(Z,:);
% C=8 0.000 7
% 8 0.000 9
% 9 0.002 6
% 9 0.002 10
% 10 0.004 8
% 11 0.001 3
% 11 0.001 4
% 12 0.003 5
But what I want is
% C=8 0.000 7
% 8 0.000 9
% 9 0.002 6
% 10 0.004 8
% 9 0.002 10
% 11 0.001 3
% 11 0.001 4
% 12 0.003 5
Do you have any suggestions that don't involve using nested loops and if conditions?
Thank you very much for your attention!
Mattia
2 comentarios
Respuesta aceptada
Torsten
el 31 de Mayo de 2023
Editada: Torsten
el 31 de Mayo de 2023
A = [11 0.001 3
11 0.001 4
12 0.003 5
9 0.002 6
8 0.000 7
10 0.004 8
8 0.000 9
9 0.002 10];
% B matrix is the reference one
B = [8 0.000
8 0.000
9 0.002
10 0.004
9 0.002
11 0.001
11 0.001
12 0.003];
[~,idx] = sortrows(A,[1 2]);
[~,jdx] = sortrows(B,[1 2]);
C = A(idx(jdx),:)
3 comentarios
Torsten
el 31 de Mayo de 2023
Editada: Torsten
el 31 de Mayo de 2023
A=[11 0.001 3
11 0.001 4
12 0.003 5
9 0.002 6
8 0.000 7
10 0.004 8
8 0.000 9
9 0.002 10];
% B matrix is the reference one
B=[8 0.000
8 0.000
9 0.002
10 0.004
9 0.002
11 0.001
11 0.001
12 0.003];
Acopy = A;
C = zeros(size(A));
for i = 1:size(A,1)
idx = find(Acopy(:,1:2)==B(i,:),1);
C(i,:) = Acopy(idx,:);
Acopy(idx,:) = [];
end
C
Más respuestas (0)
Ver también
Categorías
Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!