使用边框在z轴上拆分立方体

时间:2016-03-07 14:39:05

标签: matlab

我有一个3D数组,例如,A = rand(3,5,10)我希望使用存储在矩阵中的特定边框z-dimension中将其拆分,例如borders = [1 2;3 5;6 10]获得一个新矩阵(单元):

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

2 个答案:

答案 0 :(得分:1)

如果它不重要,那么B是一个3d数组,这应该产生相同的结果:

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

答案 1 :(得分: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));