No BSD License  

Highlights from
catdim

from catdim by Andreas Hoechner
Unconcatenate array and catenate along other dimension.

out=catdim(dims,a)
function out=catdim(dims,a)
% CATDIM Unconcatenate array and catenate along other dimension.
% OUT=CATDIM(DIMS,A)
% with DIMS=[da1,da2;db1,db2;..] an array of size [n,2].
% Unconcatenates array A along dimension da1 and concatenates along da2,
% then db1 and so on.
% At the end squeezes result to remove singelton dimensions.
% Useful to reshape a multidimensional array to display it e.g. with imagesc.
%
% Examples:
% 
% a=[1,2,3;4,5,6]; a=cat(3,a,a+10)
% a(:,:,1) =
%      1     2     3
%      4     5     6
% a(:,:,2) =
%     11    12    13
%     14    15    16
% 
% catdim([3,1],a)
% ans =
%      1     2     3
%      4     5     6
%     11    12    13
%     14    15    16
% catdim([3,2],a)
% ans =
%      1     2     3    11    12    13
%      4     5     6    14    15    16
% 
% b=[1,2;,3,4]
% b =
%      1     2
%      3     4
% catdim([1,2],b)
% ans =
%      1     2     3     4
% 
% c=cat(4,a,a+20)
% c(:,:,1,1) =
%      1     2     3
%      4     5     6
% c(:,:,2,1) =
%     11    12    13
%     14    15    16
% c(:,:,1,2) =
%     21    22    23
%     24    25    26
% c(:,:,2,2) =
%     31    32    33
%     34    35    36
% 
% catdim([3,2;4,1],c)
% ans =
%      1     2     3    11    12    13
%      4     5     6    14    15    16
%     21    22    23    31    32    33
%     24    25    26    34    35    36
%
% See also CAT, DEAL, NUM2CELL, MAT2CELL, CELL2MAT, RESHAPE
%
% Code is heavily based on D.C. Hanselman's UNCAT
% 
% Andreas Hoechner, GFZ Potsdam
% 20.8.2007

if nargin~=2
   error('uncat:IncorrectInputArguments','Two Input Arguments Required.')
end
if isempty(dims) || size(dims,2)~=2 || ~isequal(fix(dims),dims) || min(min(dims))<1 || max(max(dims))>ndims(a)
   error('uncat:DimOutofRange','DIM Invalid.')
end

for ncd=1:size(dims,1),
    d1=dims(ncd,1);
    d2=dims(ncd,2);
    b=cell(1,size(a,d1));
    id=repmat({':'},1,ndims(a));
    for k=1:size(a,d1),
        id{d1}=k;
        b{k}=a(id{:});
    end
    a=cat(d2,b{:});
end
out=squeeze(a);

Contact us at files@mathworks.com