如何使用max或min返回的多维索引?

时间:2016-03-22 16:24:49

标签: matlab multidimensional-array indexing max complex-numbers

在matlab中,

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

返回最大值以及沿指定维度dim 的最大值的索引。当A是一个多维数组时,变量I被证明是一个多维数组,其维度与A相同,但昏暗维度设置为1.我的问题是如何使用索引多维数组I从A中获取最大值。

为了提供特定的用例,我希望在A可以包含复数时,沿着维度dim获得具有最大实部的复数。

我可以用

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

获取最大实部及其指数。但是,如何在这些指数中获得原始复杂变量?我对A超过2维的情况特别感兴趣。

1 个答案:

答案 0 :(得分:3)

如果dim是任意的,最简单的方法是将其移至第一维(使用permute)以简化索引:

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进行比较:

>> 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