使用sub2ind而不是循环进行多维阵列.MATLAB



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

A=normrnd(0,1,60,150);
[~,idx]=max(abs(A),[],2);
MAX=A(sub2ind(size(A), 1:size(A,1), idx'));

但是,在三维情况下,我使用sub2ind()函数有问题。我知道这是虚拟问题,但是我真的找不到解决方案(可能是由于星期五)

使用循环的工作代码:

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] = max(abs(a),[],2);

试用>> max1 = a(idx)

最新更新