MATLAB индексы минимума, отвечающие определенным критериям - PullRequest
0 голосов
/ 16 мая 2019

Скажем, у меня есть матрица

A= [1 2 3
    2 5 5
    4 6 2]

Я хочу найти индексы максимума из определенного диапазона столбцов, заданного вектором A_index =[1 0 1], означающего найти максимум из столбцов 1 и 3.Это максимум 5.Как мне найти его индексы, то есть строка = 2 столбца = 3. Обратите внимание, что 5 также встречается в столбце 2, но я не хочу его Если я использую простое «find», я не получаю правильное решение

1 Ответ

2 голосов
/ 16 мая 2019

Заменить элементы нежелательных столбцов A на NaN. Затем используйте max, чтобы найти линейный индекс максимального элемента. Наконец, преобразуйте линейный индекс в индексы строк и столбцов, используя ind2sub.

A_index(A_index==0)=NaN; %Replacing 0s with NaNs (needed when A has non-positive elements)
A = bsxfun(@times, A, A_index); %With this, zeros (now NaNs) of A won't affect 'max'
[~ , ind] = max(A(:));          %finding the linear index of the maximum value
[r, c] = ind2sub(size(A),ind);  %converting the linear index to row and column subscripts

В ≥ R2016b, вторая строка может быть записана с неявным расширением как:

A = A.*A_index;

Последние две строки также можно записать в виде:

[r,c] = find(A==max(A(:)));

, что вы найдете лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...