Interchange dimensions of cell array and the matrices included in it
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hello.
Assume that I have a cell array as shown below:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/716379/image.png)
Can I convert it to the following form:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/716384/image.png)
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 comentarios
Respuestas (1)
Turlough Hughes
el 19 de Ag. de 2021
Editada: Turlough Hughes
el 20 de Ag. de 2021
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 comentarios
Turlough Hughes
el 19 de Ag. de 2021
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.
Ver también
Categorías
Más información sobre Cell Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!