沿着具有索引的特定维度在2D矩阵中找到最大值

时间:2014-04-09 15:03:08

标签: matlab matrix multidimensional-array indexing max

我有<206x193>矩阵A。它包含193个时间步长的206个不同位置的参数值。我对每个位置的最大值以及相应的指数感兴趣。我有另一个矩阵B具有相同的A维度,我对A在该位置的值最大时的每个位置的值感兴趣。

我尝试了[max_val pos] = max(A,[],2),它提供了正确的最大值,但A(pos)不等于max_val

这个功能究竟如何运作?

我也尝试了一个较小的例子。我还是不明白指数的含义......

>> H

H(:,:,1) =

     1     2
     3     4

H(:,:,2) =

     5     6
     7     8

>> [val pos] = max(H,[],2)

val(:,:,1) =

     2
     4

val(:,:,2) =

     6
     8

pos(:,:,1) =

     2
     2

pos(:,:,2) =

     2
     2

2 个答案:

答案 0 :(得分:0)

idx中的索引表示相应行中最大值的索引。如果要测试sub2ind

,可以使用A(pos)=max_val创建线性索引
A=rand(206, 193);
[max_val, idx]=max(A, [], 2);
A_max=A(sub2ind(size(A), (1:size(A,1))', idx));

同样,您可以使用以下方法访问B的值:

B_Amax=B(sub2ind(size(A), (1:size(A,1))', idx));

从你的例子:

H(:,:,2) =

 5     6
 7     8

[val pos] = max(H,[],2)

val(:,:,2) =

 6
 8

pos(:,:,2) =

 2
 2

pos(:,:,2)[2; 2]的原因是因为两行的最大值都位于第2位。

答案 1 :(得分:0)

max主要用于向量。在正常模式下,甚至多维数组也被视为一系列向量,沿着这些向量应用最大函数。

因此,要获得A在最大值时每个位置的B值,您应该

// find the maximum values and positions in A
[c,i] = max(A, [], 2);
// iterate along the first dimension, to retrieve the corresponding values in B
C = [];
for k=1:size(A,1)
    C(k) = B(k,i(k));
end

您可以参考@Jigg的答案,以更简洁的方式创建矩阵C