Interchange dimensions of cell array and the matrices included in it
    4 次查看(过去 30 天)
  
       显示 更早的评论
    
Hello.
Assume that I have a cell array as shown below:

Can I convert it to the following form:

I need to interchange the number of columns in the cell with the number of columns in the matrices inside. I was able to do it in few lines. But is there a direct way to make this conversion?
Thanks a lot,
Ahmad Gad
0 个评论
回答(1 个)
  Turlough Hughes
      
 2021-8-19
        
      编辑:Turlough Hughes
      
 2021-8-20
  
      Here's one way
temp = vertcat(originalData{:});
D = repmat({zeros(3,27)},1,1000); % preallocate
for ii = 1:1000
    D{ii} = reshape(temp(:,ii),3,27);
end
The approach takes the first column from each matrix in the 1x27 input cell array and concatenates the them making a 3x27 matrix for the first cell of the output; then continues to the second input columns for the second cell in the output, and so on and so forth.
EDIT
You could use splitapply as follows:
D = splitapply(@(x) {reshape(x,3,27)}, vertcat(originalData{:}), 1:1000);
Actually, much simpler is not orgainsing the data into cells in the first place - you can have a 3 by 27 by 1000 matrix and this is just easier to work on in the long run:
D = reshape(vertcat(originalData{:}),3,27,1000);
3 个评论
  Turlough Hughes
      
 2021-8-19
				Ok I've added in a one-liner (see edit above). Other than that, I doubt there are more direct functions for what you want to do.
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

