2017-11-15 5 views
1

ここでは簡略化した例であるMATLABのインデックスに問題NDアレイ

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 

I、すなわちx(1,2,:); x(1,1,:); x(2,3,:)x(i1(ii),i2(ii),:)を抽出する[3,3]。

しかし、x(i1,i2,:)はサイズ[3,3,3]の3dアレイを与える。

だから、私は、これは空想方法であってはならないと考えてい

3 11 19 
1  9 17 
6 14 22 

を与える愚かなループ

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

を使用。

答えて

3

あなたは[8 * 3]行列にxを再形成し、線形インデックスに添字を変換することができます:

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