2014-02-10 3 views
0

Предположим, что в MATLAB у меня есть реальная матрица A, которая равна n x m и двоичная матрица B того же размера. Последняя матрица определяет набор оптимизации (все индексы, для которых элемент из B равен единице): над этим множеством я хотел бы найти максимальный элемент A. Как я могу это сделать?Максимальное количество подмножества массива (MATLAB)

Первой идеей, которую я имел, является то, что я считаю C = A.*B и ищем максимальный элемент C. Это отлично работает для всех матриц A, у которых есть хотя бы один положительный элемент, однако он не работает для матриц со всеми отрицательными элементами.

ответ

2

Вы можете сделать

C = A(B==1); 

дать вам массив только значений А, соответствующий значению 1 в Б. и

max(C) 

даст вам максимальное значение A где B равно 1

С помощью этого метода вы не сталкиваетесь с проблемой, когда все значения A отрицательны, поскольку нули не отображаются в C.

Очевидно, что вы можете конденсироваться это

desiredValue = max(A(B(:)==1)); 

Я использую оператор двоеточия, чтобы убедиться, что результат A(B(:)==1) является вектор-столбец - если B является все те, которые я не уверен, если Matlab будет возвращать вектор или a nxm (и я не могу подтвердить это сейчас).

обновление, чтобы получить индекс стоимости, вы можете сделать:

f = find(B==1); 
[m mi] = max(A(f)); 
maxIndex = f(mi); 

А чтобы получить, что обратно в 2D-элементов:

[i j] = ind2sub(size(A), maxIndex); 
+0

Спасибо, но я заинтересован в элемент, а не само по себе. Будет ли возможно обновить ваше решение? – Ilya

+0

«Элемент» - вы имеете в виду индекс? Я обновил свой ответ ... – Floris

+0

Спасибо, я попробую это – Ilya

Смежные вопросы