MATLAB - 在矩阵的选定行/列中查找最大值/最小值

时间:2015-10-29 04:31:41

标签: matlab matrix

如果我有一个矩阵,请说:

A = [ 0 2 4 0 
      2 0 5 0
      4 5 0 3
      0 0 3 0 ]

我希望找到我可以输入的矩阵中的最大值:

max(max(A))

max(A(:))

如果我只想找到第1行和第2行以及第3列和第4列的最大值,我可以这样做:

a = [1 2]
b = [3 4]

max(max(A(a,b))

但是如果我想找到与该值对应的行和列的索引呢?

根据matlab文档,如果我使用整个矩阵,我可以使用ind2sub函数:

[val,idx] = max(A(:))
[row,col] = ind2sub(size(A),idx)

但是我怎样才能使用我的示例,我使用向量ab来确定它找到值的行和列?

这是迄今为止我能够解决的唯一方法:

max_val = 0;
max_idx = [1 1];
for ii = a
    [val,idx] = max(A(ii,b))
    if val > max_val
        max_val = val
        max_idx = [ii idx]

但这对我来说似乎相当笨拙......任何想法?

1 个答案:

答案 0 :(得分:0)

假设子矩阵A(a,b)是连续的(如你的例子中所示):

 A = [ 0 2 4 0 
  2 0 5 0
  4 5 0 3
  0 0 3 0 ]

a = [1 2]; b = [3 4];
B = A(a,b)
[val,idx] = max(B(:));
[row,col] = ind2sub(size(B),idx);
maxrow = row + a(1) - 1;
maxcol = col + b(1) - 1;

您正在子矩阵B中找到相对索引。这相当于子矩阵左上角的其他行和列。

现在假设a和b导致一组行和列不是连续的子矩阵,例如a = [1 3],b = [3 4],结果非常相似。 "排"和" col"是a和b向量中的索引:

A = [ 0 2 4 0 
  2 0 5 0
  4 5 0 3
  0 0 3 0 ]

a = [1 3]; b = [3 4];
B = A(a,b)
[val,idx] = max(B(:));
[row,col] = ind2sub(size(B),idx);
maxrow = a(row);
maxcol = b(col);

现在你正在索引索引中工作。