Обращение к матрице Matlab с помощью Index-matrix - PullRequest
2 голосов
/ 08 ноября 2011

Я использую команду [A,idx] = sort(A), которая сортирует матрицу A по столбцам, что я и хочу. Матрица idx показывает, как каждый столбец A был отсортирован. Теперь, если я пытаюсь получить доступ к B(idx), MATLAB предполагает, что я ссылаюсь на B в абсолютной манере. Это, однако, не то, что я хочу, я хочу, чтобы столбцы B были отсортированы по той же схеме, что и A.

Поэтому я ищу команду, которая будет индексировать матрицу по столбцам. Конечно, я могу легко сделать это с помощью цикла, но это кажется довольно плохим решением. Я также придумал это решение, но оно не очень красивое

idx = idx+repmat(0:size(idx,1):size(idx,2)*size(idx,1)-1,size(idx,1),1)

Заранее спасибо.

1 Ответ

2 голосов
/ 08 ноября 2011

Рассмотрим следующее:

A = randi([1 10],[5 4]);
[AA,idx] = sort(A);

Ваше решение неплохое, его можно немного улучшить, заменив вызов REPMAT на BSXFUN:

idx = bsxfun(@plus, idx, 0:size(idx,1):numel(idx)-1);
isequal(AA,A(idx))

Другой альтернативой является преобразование в линейные индексы с использованием SUB2IND:

idx = sub2ind(size(idx), idx, repmat(1:size(idx,2),size(idx,1),1));
isequal(AA,A(idx))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...