Программа неправильно считает максимум
clc
A = [ 13 54 21 ;
16 69 13 ;
22 23 32];
[r,c,v] = find(A == max(A(:)));
disp(['max ',num2str(v)])
disp(['index ',num2str([r,c])])
Программа не правильно считает максимум, но индексы правильные
max 1 - false, должно быть 69 || индекс 2 2 - верно
Почему вы решили, что функция find
вернет максимальное значение 69
. В документации указано: «[row,col,v] = find(___)
также возвращает вектор v
, который содержит ненулевые элементы X». В вашем примере X=A == max(A(:))
, что означает X
, является матрицей логические индексы, которая имеет только значения 0
или 1
.
Тогда как получить число 69? Если он выводится после 0 или 1?
Какие результаты вы хотите получить, если есть более одной максимизирующей записи? Скажи A = [13 54 21; 16 69 13; 22 23 69];
disp(['max ', num2str(A(r,c))])
%For r2018b and later
[val,idx] = max(A,[],'all');
%For earlier versions
[val,idx] = max(A(:));
Максимальное значение элемента равно val, val == A(idx). Для заданного синтаксиса val и idx гарантированно будут числами, а не векторами или матрицами. Если вам нужны индексы строк и столбцов, используйте функцию ind2sub
[r,c] = ind2sub(size(A), idx);
[val,idx] = max(A,[],'all')
не работает в R2018b. Работает только версия с одним выходом
Не могли бы вы проверить [val,idx] = max(A,[],'all','linear') или [val,idx] = max(A,[],[1 2],'linear') ? Я использую r2017b и написал ответ, используя онлайн-справку по функции max.
Онлайн-справочник всегда следует за последним выпуском и, к сожалению, не указывает, когда параметры были добавлены к функции. Опция 'all'
появилась совсем недавно.
Что не так с
[m,idx] = max(A)
?