Azzera filtri
Azzera filtri

Sort rows of a matrix based on a specific array

1 visualizzazione (ultimi 30 giorni)
Hi everyone,
Let us assum Matrix A and array B as follows:
A = [1 0 1
2 0 0
4 0 0
3 1 1
6 0 0
5 0 0]
B = [3 4 1]
Array B always include values stored in the first column of Matrix A. So, I want to sort rows of Matrix A based on Array B. Whatever comes first in Array B must come first in Matrix A. Moreover, I do not want to change the position of any other rows in Matrix A that their values (first column) do not exist in Array B.
Having said this, sorted version of Matrix A based on Array B will be as follows:
An = [3 1 1
2 0 0
4 0 0
1 0 1
6 0 0
5 0 0]
Would you please guide me what is the fastest way to do this?
Regards,
Amir

Risposta accettata

Stephen23
Stephen23 il 13 Lug 2020
Modificato: Stephen23 il 13 Lug 2020
>> [X,Y] = ismember(A(:,1),B);
>> [~,Z] = sort(Y(X));
>> T = A(X,:);
>> A(X,:) = T(Z,:)
A =
3 1 1
2 0 0
4 0 0
1 0 1
6 0 0
5 0 0

Più risposte (1)

madhan ravi
madhan ravi il 13 Lug 2020
v = sort(B);
A([1, v(end)], :) = A([v(end), 1], :)
  2 Commenti
Amirhossein Moosavi
Amirhossein Moosavi il 13 Lug 2020
Thank you, but it does not work for some cases. Let us say Array B is as follows:
B = [3 4]
Then, Matrix A becomes like this (using your code):
A = [3 1 1
2 0 0
4 0 0
1 0 1
6 0 0
5 0 0]
While, Matrix A must have become as follows:
A = [1 0 1
2 0 0
3 1 1
4 0 0
6 0 0
5 0 0]
madhan ravi
madhan ravi il 13 Lug 2020
I misunderstood the question.

Accedi per commentare.

Categorie

Scopri di più su Shifting and Sorting Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by