Concatenate Cellarray and cell2mat

2 views (last 30 days)
Aviator
Aviator on 20 Dec 2011
I have a 7x3 Cell array of cells as follows:
X =
[ 20] [ 20] [ 20]
[ 125] [ 315] [ 125]
[ 224] [ 500] [ 200]
[1000] [1000] [ 250]
[2000] [2000] [ 500]
[] [] [1000]
[] [] [2000]
I need to concatenate this to a 1 column cellarray and eventually convert it to a matrix. Any help is greatly appreciated!
Please note that equalizing the dimension by filling in the empty arrays with zero is not an option for me.

Answers (3)

Walter Roberson
Walter Roberson on 20 Dec 2011
arrayfun(@(IDX) [X{IDX,:}], 1:size(X,1), 'Uniform', 0)

Sean de Wolski
Sean de Wolski on 20 Dec 2011
How about a for-loop with cell2mat on each row?
Xv = cell(size(X,1),1);
for ii = 1:length(X)
Xv{ii} = cell2mat(X(ii,:));
end

Aviator
Aviator on 20 Dec 2011
I just figured it out, "reshape" does the job. this is one of the answers though. Thanks everybody for responding....
[m,n] = size(X); XMatrix = cell2mat(reshape(X,m*n,1));
  3 Comments
Walter Roberson
Walter Roberson on 20 Dec 2011
This depends on what is meant by a one-column cell array. The code I showed produces a one-column cell array (or a one-row, whichever), in which the cells happen to be different sizes. Creating a vector out of all of the elements of the array would be a different task, and there would not usually be a lot of point in producing a "one column cell array" of the result when a numeric vector result would do.
The code posted in this Answer does not satisfy the initial condition that the result be a one-column cell array: you would need to wrap the results inside {} in order to get a cell array, or use mat2cell() on it. But if you are going to use mat2cell then you might as well just use
X(cellfun(@isempty,X)) = [];
and that would be enough, including the conversion to column vector.
Jan
Jan on 20 Dec 2011
Btw.: cellfun('isempty', X) is much faster than cellfun(@isempty, X).

Sign in to comment.

Categories

Find more on Cell Arrays in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!