【问题标题】:Use sub2ind instead of loop for multidimensional arrays. Matlab对多维数组使用 sub2ind 而不是循环。 MATLAB
【发布时间】:2018-05-15 08:21:30
【问题描述】:

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

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() 或其他优雅的解决方案?

【问题讨论】:

    标签: matlab multidimensional-array indexing


    【解决方案1】:

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

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

    试用>> [~,idx]=max(abs(A),[],2);

    试用>> MAX1 = A(idx)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 2021-12-13
      相关资源
      最近更新 更多