行列がA
あり、この行列の行を並べ替えるとします。マトリックス上で同じ順序を複製するにはどうすればよいですB
か(もちろん同じサイズ)?
例えば
A = rand(3,4);
[val ind] = sort(A,2);
B = rand(3,4);
%// Reorder the elements of B according to the reordering of A
これは私が思いついた最高のものです
m = size(A,1);
B = B(bsxfun(@plus,(ind-1)*m,(1:m)'));
好奇心から、他に選択肢はありますか?
更新: 2008a(XP)でプロファイルされたJonasの優れたソリューション:
n = n
0.048524 1.4632 1.4791 1.195 1.0662 1.108 1.0082 0.96335 0.93155 0.90532 0.88976
n = 2m
0.63202 1.3029 1.1112 1.0501 0.94703 0.92847 0.90411 0.8849 0.8667 0.92098 0.85569
これは、 JITAのおかげで(おそらく)ループがMATLABプログラマーにとってもはや嫌悪感ではないことを示しています。