我有一个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
答案 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));