Как получить индексы максимальных значений в матрице и сопоставить их с индексами другой матрицы того же размера?

У меня есть две матрицы 16x12. В матрице A я должен отсортировать по убыванию и найти первые 10 максимальных значений. Но я должен знать индексы максимальных значений перед сортировкой.

Наконец, я должен передать эти индексы второй матрице и найти значения в этой матрице.

Я пробовал с циклом for, но это не дает мне точного ответа.


person user3269865    schedule 09.04.2014    source источник
comment
возможный дубликат матрицы MATLAB Sort 2D и 3D и доступ через индекс   -  person NKN    schedule 09.04.2014
comment
аналогичный пост: stackoverflow.com/questions/12112677/   -  person NKN    schedule 09.04.2014


Ответы (1)


Это должно работать:

[~,I] = sort(A(:), 'descend');
vals = B(I(1:10));

Например:

>> A = [ 4 2; 1 5];
>> B = [ 7 8; 0 NaN];
>> [~,I] = sort( A(:), 'descend' );
>> vals = B(I(1:2))

vals =
  NaN
  7    
person Lisa    schedule 09.04.2014
comment
Это идеально. но что, если моя матрица B имеет значения NaN? - person user3269865; 09.04.2014
comment
В этом случае возвращаются значения NaN. В чем проблема с этим? Какое поведение вы ожидаете? - person Lisa; 09.04.2014
comment
Спасибо! Я с нетерпением ждал привилегий обзора :) - person Lisa; 09.04.2014
comment
Я имел в виду, как я могу пропустить значения NaN в матрице B? Вместо них я применил нулевую маску для подстановки. Поскольку они являются фоновым пикселем изображения - person user3269865; 11.04.2014
comment
Я не совсем уверен, что правильно понял: vals = vals(~isnan(vals)); то, что вам нужно? В приведенном выше примере вы получите массив vals = [7] в качестве вывода. - person Lisa; 11.04.2014