Concatenate Cellarray and cell2mat

8 Ansichten (letzte 30 Tage)
Aviator
Aviator am 20 Dez. 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.

Antworten (3)

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

Sean de Wolski
Sean de Wolski am 20 Dez. 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 am 20 Dez. 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 Kommentare
Walter Roberson
Walter Roberson am 20 Dez. 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 am 20 Dez. 2011
Btw.: cellfun('isempty', X) is much faster than cellfun(@isempty, X).

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by