Concatenate Cellarray and cell2mat
이전 댓글 표시
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.
답변 (3개)
Walter Roberson
2011년 12월 20일
arrayfun(@(IDX) [X{IDX,:}], 1:size(X,1), 'Uniform', 0)
Sean de Wolski
2011년 12월 20일
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
2011년 12월 20일
0 개 추천
댓글 수: 3
Sean de Wolski
2011년 12월 20일
for that case you could just do:
Xmatrix = [X(:)]
Walter Roberson
2011년 12월 20일
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
2011년 12월 20일
Btw.: cellfun('isempty', X) is much faster than cellfun(@isempty, X).
카테고리
도움말 센터 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!