我有一个<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 的更简洁的方法