2016-03-22 59 views
3

在MATLAB中,如何使用由max或min返回的多维索引?

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

返回最大值和那些最大值沿着指定维变暗索引。当A是一个多维数组时,变量I原来是一个与A维度相同的多维数组,除了dim维度设置为1.我的问题是如何使用索引多维数组I来从A返回最大值

为了提供一个特定的用例,我想获得最大的实数部分沿维dim,当A可以包含复数时的复数。

我可以使用

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

得到最大的实部,它们的指标。但是,如何在这些指数中获得原始复杂变量?我对A超过2个维度的案例特别感兴趣。

回答

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

这是如此的丑陋:对 – excaza

+0

@excaza只有格式:-) –