对于多维数组,请使用sub2ind而不是loop。Matlab

对于多维数组,请使用sub2ind而不是loop。Matlab,matlab,multidimensional-array,indexing,Matlab,Multidimensional Array,Indexing,我需要找到元素的一个值,该值在给定维度(在我的例子中是第二维度)中具有最大的绝对值。对于2D矩阵,这很容易 A=normrnd(0,1,60,150); [~,idx]=max(abs(A),[],2); MAX=A(sub2ind(size(A), 1:size(A,1), idx')); 但是对于三维情况,我在使用sub2ind()函数时遇到了问题我知道这是个假问题,但我真的找不到解决办法(可能是因为星期五) 使用for循环的工作代码: B=normrnd(0,1,60,150,450);

我需要找到元素的一个值,该值在给定维度(在我的例子中是第二维度)中具有最大的绝对值。对于2D矩阵,这很容易

A=normrnd(0,1,60,150);
[~,idx]=max(abs(A),[],2);
MAX=A(sub2ind(size(A), 1:size(A,1), idx'));
但是对于三维情况,我在使用
sub2ind()
函数时遇到了问题我知道这是个假问题,但我真的找不到解决办法(可能是因为星期五)

使用for循环的工作代码:

B=normrnd(0,1,60,150,450);
[~,idx]=max(abs(B),[],2);
MAX=nan(size(B,1),size(B,3));
for iDim1=1:size(B,1)
    for iDim3=1:size(B,3)
        [~,idx]=max(abs(B(iDim1,:,iDim3)));
        MAX(iDim1,iDim3)=B(iDim1,idx,iDim3);
    end %iDim3
end %iDim1

您能为这个循环提供
sub2ind()
或其他优雅的解决方案吗?

从逻辑上讲,这就是您想要的。 “在给定维度中具有最大绝对值的元素值(在我的情况下为第二维度)”

试验>>A=normrnd(0,1[2,3,3])

试验>>[~,idx]=最大值(abs(A),[],2)

试用>>最大值1=A(idx)