matlab和数组中的索引问题

时间:2017-11-15 05:01:55

标签: matlab

这是一个简化的例子

x = reshape(1:2*4*3,2,4,3); % 3d array
i1 = [1 1 2]; % index in dim 1
i2 = [2 1 3]; % index in dim 2

我想提取x(i1(ii),i2(ii),:),即x(1,2,:); x(1,1,:); x(2,3,:),其大小为[3,3]。

但是x(i1,i2,:)给出了一个大小为[3,3,3]的3d数组。

所以我使用了一个愚蠢的循环

y = nan(length(i1),3);
for ii = 1 : 3
    y(ii,:) = squeeze(x(i1(ii),i2(ii),:));
end

给出了

 3    11    19
 1     9    17
 6    14    22

我认为这绝不是一种奇特的方式。

1 个答案:

答案 0 :(得分:3)

您可以将x重新整形为[8 * 3]矩阵并将下标转换为线性索引:

x = reshape(x,[],3);
y = x(sub2ind([2 4],i1,i2),:)