这是一个简化的例子
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
我认为这绝不是一种奇特的方式。
答案 0 :(得分:3)
您可以将x
重新整形为[8 * 3]
矩阵并将下标转换为线性索引:
x = reshape(x,[],3);
y = x(sub2ind([2 4],i1,i2),:)