我有<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
答案 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