关于Matlab:如何使用max或min返回的多维索引?

How can I use the multidimensional index returned by max or min?

在matlab中,

1
[M,I] = max(A, [], dim)

返回最大值,以及沿着指定尺寸dim的这些最大值的索引。当A是多维数组时,变量I变成与A具有相同维的多维数组,除了将dim维度设置为1。我的问题是如何使用索引多维数组I从A取回最大值。 。

要提供一个特定的用例,我想在A可以包含复数的情况下获得沿维度dim的最大实部的复数。

我可以使用

1
[M,I] = max(real(A), [], dim)

以获取最大的实部及其索引。但是,如何在这些索引处获得原始的复数变量?我对A的尺寸大于2的情况特别感兴趣。


如果dim是任意的,则最简单的是将其移动到第一维(使用permute),以简化向后索引:

1
2
3
4
5
6
A = randn(2,3,4)+1j*randn(2,3,4); %// example data
dim = 2; %// dimension along which to maximize
Ap = permute(A, [dim 1:dim-1 1+dim:ndims(A)]); %// move dim to 1st dim
[M,I] = max(real(Ap), [], 1); %// minimize function of Ap along 1st dim
ind = I + reshape(0:size(Ap,1):numel(Ap)-1, size(I)); %// build linear indices from I
values = Ap(ind); %// index into Ap to get minimizing values

检查是否可行:使用A非复杂(因此real不执行任何操作),然后将valuesM进行比较:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>> A = randn(2,3,4);
dim = 2;
Ap = permute(A, [dim 1:dim-1 1+dim:ndims(A)]);
[M,I] = max(real(Ap), [], 1);
ind = I + reshape(0:size(Ap,1):numel(Ap)-1, size(I));
values = Ap(ind);
values == M

ans(:,:,1) =
     1     1
ans(:,:,2) =
     1     1
ans(:,:,3) =
     1     1
ans(:,:,4) =
     1     1