Sort the array by template

조회 수: 2 (최근 30일)
Rostislav Teryaev
Rostislav Teryaev . 2018년 5월 23일
댓글: Ameer Hamza . 2018년 5월 23일
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);
but as it uses for loops speed is not fast. Maybe there is a way to do it by using MatLab builtin functions?

채택된 답변

Ameer Hamza
Ameer Hamza 2018년 5월 23일
편집: Ameer Hamza 님. 2018년 5월 23일
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
Ameer Hamza
Ameer Hamza 2018년 5월 23일
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 :)

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

sloppydisk 2018년 5월 23일
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
sloppydisk 2018년 5월 23일
Please see Ameer's answer.

댓글을 달려면 로그인하십시오.


Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기


Community Treasure Hunt

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

Start Hunting!

Translated by