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

Matlab 如何使用max或min返回的多维索引?,matlab,multidimensional-array,indexing,max,complex-numbers,Matlab,Multidimensional Array,Indexing,Max,Complex Numbers,在matlab中 [M,I] = max(A, [], dim) 返回最大值以及指定维度上这些最大值的索引。当A是多维数组时,变量I被证明是一个多维数组,其维度与A相同,除了dim维度设置为1。我的问题是如何使用索引多维数组I从A返回最大值 为了提供一个特定的用例,我想获得在维度dim上具有最大实部的复数,而a可能包含复数 我可以用 [M,I] = max(real(A), [], dim) 求最大实部及其指数。但是,我如何得到这些指数的原始复变量呢?我特别感兴趣的是A有两个以上维度的情

在matlab中

[M,I] = max(A, [], dim) 
返回最大值以及指定维度上这些最大值的索引。当A是多维数组时,变量I被证明是一个多维数组,其维度与A相同,除了dim维度设置为1。我的问题是如何使用索引多维数组I从A返回最大值

为了提供一个特定的用例,我想获得在维度dim上具有最大实部的复数,而a可能包含复数

我可以用

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

求最大实部及其指数。但是,我如何得到这些指数的原始复变量呢?我特别感兴趣的是A有两个以上维度的情况

如果
dim
是任意的,则最容易将其移动到第一个维度(使用),以简化后面的索引:

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
non-complex(因此
real
什么都不做)并将
值与
M
进行比较:

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

这太难看了:p