假设在MATLAB中我有一个真实的矩阵A
,它是n x m
和一个相同大小的二进制矩阵B
。后一个矩阵定义了优化集(B
的元素等于一的所有索引):在这个集合上我想找到A的最大元素。我该怎么做?
我的第一个想法是我考虑C = A.*B
并寻找C
的最大元素。这适用于具有至少一个正元素的所有矩阵A
,但它不适用于具有所有负元素的矩阵。
答案 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);