Sort the array by template
2 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
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
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 件のコメント
参考
カテゴリ
Help Center および File Exchange で Matrix Indexing についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!