最大的数组子集(MATLAB)

时间:2014-02-10 04:19:29

标签: matlab optimization

假设在MATLAB中我有一个真实的矩阵A,它是n x m和一个相同大小的二进制矩阵B。后一个矩阵定义了优化集(B的元素等于一的所有索引):在这个集合上我想找到A的最大元素。我该怎么做?

我的第一个想法是我考虑C = A.*B并寻找C的最大元素。这适用于具有至少一个正元素的所有矩阵A,但它不适用于具有所有负元素的矩阵。

1 个答案:

答案 0 :(得分:2)

你可以做到

C = A(B==1);

为您提供一个仅包含A值的数组,该值对应于B中的值1.并且

max( C )

将为您提供A的最大值,其中B为1

使用此方法,当A的所有值均为负值时,您不会遇到问题,因为零未出现在C中。

显然你可以将其浓缩为

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

我正在使用冒号运算符来确保A(B(:)==1)的结果是列向量 - 如果B都是1,我不确定Matlab是否会返回向量或nxm矩阵(我现在无法确认。)

更新以获取值的索引,您可以执行以下操作:

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

并将其转回2D元素:

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