MatrixBerryCore
cell2mat.m
Go to the documentation of this file.
1 function outArr=cell2mat(inpCArr)
2 nElems=numel(inpCArr);
3 if nElems == 0
4  outArr=[];
5 elseif nElems == 1
6  outArr=inpCArr{1};
7 elseif ismatrix(inpCArr)
8  nRows=size(inpCArr,1);
9  nCols=size(inpCArr,2);
10  if (nRows < nCols)
11  outArr=cell(nRows,1);
12  for iCol=1:nRows
13  outArr{iCol}=cat(2,inpCArr{iCol,:});
14  end
15  outArr=cat(1,outArr{:});
16  else
17  outArr=cell(1, nCols);
18  for iCol=1:nCols
19  outArr{iCol}=cat(1,inpCArr{:,iCol});
20  end
21  outArr=cat(2,outArr{:});
22  end
23 else
24  sizeVec=size(inpCArr);
25  nDims=numel(sizeVec);
26  for iDim=(nDims-1):-1:1
27  tmpCArr=cell([sizeVec(1:iDim) 1]);
28  tmpSizeVec=size(tmpCArr);
29  nTmpDims=numel(tmpSizeVec);
30  nTmpElems=prod(tmpSizeVec);
31  indColVecList=cell(1,nTmpDims);
32  [indColVecList{1:nTmpDims}]=ind2sub(tmpSizeVec,(1:nTmpElems).');
33  if nTmpDims==2 && tmpSizeVec(2)==1
34  indColVecList=indColVecList(1);
35  nTmpDims=1;
36  end
37  indRowVecList=mat2cell(num2cell([indColVecList{:}]),...
38  ones(1,nTmpElems),nTmpDims);
39  for iTmpElem=1:nTmpElems
40  indCurVecList=indRowVecList{iTmpElem};
41  tmpCArr{indCurVecList{:}}=cat(iDim+1,...
42  inpCArr{indCurVecList{:},:});
43  end
44  inpCArr=tmpCArr;
45  end
46  outArr=cat(1,inpCArr{:});
47 end
function cell2mat(in inpCArr)
CELL2MAT does the same as the built-in cell2mat function but a) 20% faster b) works with cell arrays ...
function cat(in dimNum, in varargin)