# Interchange dimensions of cell array and the matrices included in it

2 次查看（过去 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,

### 回答（1 个）

Turlough Hughes 2021-8-19

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 个评论显示隐藏 2更早的评论
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.

R2020b

### Community Treasure Hunt

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

Start Hunting!

Translated by