# Sort the array by template

2 Ansichten (letzte 30 Tage)
Rostislav Teryaev am 23 Mai 2018
Kommentiert: Ameer Hamza am 23 Mai 2018
I have two arrays A1 and B1 in which elements correspond:
A1 = [a1 a2 a3 a4 a5];
B1 = [b1 b2 b3 b4 b5];
then I change order of elements of the first array anyhow (they are all unique), for exaple like this:
A2 = [a4 a1 a3 a5 a2];
The question is how to get array B2 sorted in the same way? It should be
B2 = [b4 b1 b3 b5 b2];
I tried to write function which is:
B2 = zeros(length(B1),1);
for i = 1:length(B2)
ind = find( A1 == A2(i) );
B2(i) = B1(ind);
end
but as it uses for loops speed is not fast. Maybe there is a way to do it by using MatLab builtin functions?
##### 0 Kommentare-1 ältere Kommentare anzeigen-1 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

### Akzeptierte Antwort

Ameer Hamza am 23 Mai 2018
Bearbeitet: Ameer Hamza am 23 Mai 2018
For a generalized matrix a1 and a2, you can use the following code
[~,index] = ismember(a2', a1', 'row');
b2 = b1(index)
This will work on R2016b and later.
##### 8 Kommentare7 ältere Kommentare anzeigen7 ältere Kommentare ausblenden
Ameer Hamza am 23 Mai 2018
You will get hold of such solution once you start to develop some intuition about these frequently used MATLAB functions. Of course, that comes with time, experience and reading a lot of documentation :)

Melden Sie sich an, um zu kommentieren.

### Weitere Antworten (1)

sloppydisk am 23 Mai 2018
a1 = [1 4 2 5 7];
b1 = 1:5;
mySecretOrder = [1 3 2 5 4];
a2 = a1(mySecretOrder);
[~, order] = ismember(a2, a1)
b1 = b1(order)
##### 2 Kommentare1 älteren Kommentar anzeigen1 älteren Kommentar ausblenden
sloppydisk am 23 Mai 2018

Melden Sie sich an, um zu kommentieren.

### Kategorien

Mehr zu Logical finden Sie in Help Center und File Exchange

### Community Treasure Hunt

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

Start Hunting!