在具有索引的二维矩阵中沿着某个维度寻找最大值



我有一个<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

idx中的索引表示相应行中最大值的索引。如果您想测试A(pos)=max_val ,可以使用sub2ind创建线性索引

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

CCD_ 12是CCD_ 13的原因是,对于两行,最大值都在位置2处。

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 的更简洁的方法

相关内容

  • 没有找到相关文章