Найти максимальное значение подмножества матрицы в MATLAB при сохранении индексов полной матрицы - PullRequest
6 голосов
/ 29 января 2011

В настоящее время я могу найти максимальное значение матрицы C и ее индекс с помощью следующего кода:

[max_C, imax] = max(C(:));
[ypeak, xpeak] = ind2sub(size(C),imax(1));

Давайте назовем подмножество матрицы C_sub

Я хочу найти максимальное значение C_sub, но я также хочу узнать индекс этого максимального значения в C.

Кажется, это должно быть легкой проблемой, но это поставило меня в тупик.

Спасибо за помощь!

Ответы [ 5 ]

2 голосов
/ 29 января 2011

Предположим, что C_sub было создано

C_sub = C(rows,cols);

, где rows и cols - векторы индексов. Сохраните эти rows и cols векторы там, где вы можете использовать их, если вы еще этого не сделали.

[max_C_sub, ind_C_sub] = max(C_sub(:));
[ypeak_sub, xpeak_sub] = ind2sub(size(C_sub), ind_C_sub);
xpeak = cols(xpeak_sub);
ypeak = rows(ypeak_sub);

Или, если rows и / или cols был вектором логики вместо вектора индексов, вы можете преобразовать их, используя find, а затем продолжить, как описано выше.

rows_ind = find(rows_logical);
1 голос
/ 29 января 2011

Однажды у меня была похожая проблема, поэтому я написал небольшую утилиту для этого. Найдите Min2 и Max2 на обмене файлами. Эти инструменты позволяют вам указать подмножество строк и / или столбцов данной матрицы для поиска.

Сделай то же самое для себя. Каждый раз, когда вам нужен инструмент в MATLAB, пишите его. Вскоре у вас будет хороший набор инструментов с учетом ваших особых потребностей. Конечно, сначала посмотрите на обмен файлами, так как есть большая вероятность, что то, что вам нужно, уже написано и размещено там.

1 голос
/ 29 января 2011

Если вам известны индексы максимума в C_sub и вы знаете положение C_sub в C, вы можете просто сложить их (и вычесть 1 для индексации Matlab), чтобы получить индексы максимум относительно C.

0 голосов
/ 06 сентября 2013

Вы также можете попробовать этот скрипт:

A=magic(5)
[x,y]=find(A==max(max(A))) %index maximum of the matrix A 
A_max=A(x,y)
[x1,y1]=find(A==min(max(A))) %index minimum of the matrix A 
A_min=A(x1,y1)
0 голосов
/ 29 января 2011

А как насчет:

mask = nan(size(C));
mask(C_sub_indices) = 1;
[max_C, imax] = max(C .* mask);

В этом коде C_sub_indices - это индексное выражение, примененное к C, которое произвело C_sub.Этот код может не работать, если C_sub не является подматрицей C (например, если он переставляет строки или столбцы).

...