Предположим, что у меня есть матрица 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)'));
Из любопытства любые альтернативы?
Обновление: отличное решение Jonas, профилированное на 2008a (XP):
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
Просто показывается, что циклы больше не являются анафемами для программистов MATLAB благодаря JITA (возможно).