Interchange dimensions of cell array and the matrices included in it

1 visualización (últimos 30 días)
Ahmad Gad
Ahmad Gad el 19 de Ag. de 2021
Editada: Turlough Hughes el 20 de Ag. de 2021
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

Respuestas (1)

Turlough Hughes
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
Ahmad Gad
Ahmad Gad el 19 de Ag. de 2021
Hello,
I will check this. I acutally don't look for effeciency in the current application.
Thanks a lot
Ahmad
Turlough Hughes
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.

Iniciar sesión para comentar.

Categorías

Más información sobre Logical en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by