2016-03-07 44 views
1

我有一个三维数组例如,A = rand(3,5,10),我希望它在z-dimension使用特定边框存储到一个矩阵,例如,分borders = [1 2;3 5;6 10]得到一个新的矩阵(细胞):拆分使用z轴的立方体边界

B = {A(3,5,borders(1,:)), A(3,5,borders(2,:)), A(3,5,borders(3,:))};

我们能做到这一点使用内置的功能,即没有for循环?

编辑:

B = cell(1, length(borders)); 
for i=1:length(borders) 
    B{i} = A(:,:, borders (i,1):borders (i,2)); 
end 
+0

考虑接受一个答案,如果它帮助你。与你的其他问题一样... –

回答

1

您可以直接使用borders作为一个指标,然后使用mat2cell将其分解成单元阵列,其中每个元素为[1 x 1 x size(border, 2)]

B = squeeze(mat2cell(A(3,5,borders),1,1,ones(size(borders,1),1)*size(borders,2))).'; 

挤压和转真的只是为了得到它是正好相同的形状是你的,如果你不关心导致单元阵列,你可以简单地做的形状。

B = mat2cell(A(3,5,borders),1,1,ones(size(borders,1),1)*size(borders,2)); 
1

如果它不是重要的,B是一个三维阵列,这应该产生相同的结果:

reshape(A(3,5,borders(:)), size(borders)) 

ans = 

    0.1419 0.7060 
    0.4898 0.3500 
    0.0759 0.4173 


squeeze(B) 

ans = 

    0.1419 0.7060 
    0.4898 0.3500 
    0.0759 0.4173