如果我有一个矩阵,请说:
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)
但是我怎样才能使用我的示例,我使用向量a
和b
来确定它找到值的行和列?
这是迄今为止我能够解决的唯一方法:
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]
但这对我来说似乎相当笨拙......任何想法?
答案 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);
现在你正在索引索引中工作。