Move to MxN cell array to 1xN cell array

1 vue (au cours des 30 derniers jours)
Leo Pio D'Adderio
Leo Pio D'Adderio le 25 Fév 2025
Commenté : Stephen23 le 25 Fév 2025
I have a 15x20 cell matrix, and I would to concatenate all the elements of each cell along the columns. That is, I want to move from the 15x20 cell matrix to 1x20 cell array. I attach a file as an example. To be clear, in my case the resulting CELL{2} mu to have 101 elements, CELL{3} 119 elements and so on.
Is there a way to do this without a for loop? Thanks and I hope I was clear.

Réponse acceptée

Stephen23
Stephen23 le 25 Fév 2025
C = load('CellMatrixExample.mat').EmissivityMat
C = 15x20 cell array
Columns 1 through 10 {31964x1 single} {46x1 single} {23x1 single} {18x1 single} {29x1 single} {13x1 single} {13x1 single} {23x1 single} {26x1 single} {17x1 single} {31940x1 single} {55x1 single} {41x1 single} {22x1 single} { 6x1 single} {25x1 single} {21x1 single} {19x1 single} {22x1 single} {26x1 single} {31979x1 single} { 0x0 double} {55x1 single} {29x1 single} {12x1 single} {14x1 single} {32x1 single} {19x1 single} {17x1 single} {21x1 single} {32038x1 single} { 0x0 double} { 0x0 double} {52x1 single} {18x1 single} {24x1 single} {16x1 single} {22x1 single} {15x1 single} {15x1 single} {32088x1 single} { 0x0 double} { 0x0 double} { 0x0 double} {36x1 single} {34x1 single} {24x1 single} {12x1 single} {18x1 single} {12x1 single} {32137x1 single} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} {36x1 single} {34x1 single} {22x1 single} {11x1 single} {16x1 single} {32177x1 single} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} {36x1 single} {31x1 single} {14x1 single} {10x1 single} {32219x1 single} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} {34x1 single} {26x1 single} {12x1 single} {32293x1 single} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} {20x1 single} {18x1 single} {32365x1 single} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 4x1 single} {32479x1 single} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} {32599x1 single} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} {32776x1 single} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} {32936x1 single} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} {33142x1 single} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} Columns 11 through 20 {31x1 single} {11x1 single} {14x1 single} {13x1 single} {15x1 single} {23x1 single} {25x1 single} {18x1 single} {29x1 single} {12x1 single} { 7x1 single} {25x1 single} {10x1 single} {14x1 single} {21x1 single} {22x1 single} {23x1 single} {25x1 single} { 9x1 single} {24x1 single} { 9x1 single} {10x1 single} {17x1 single} {21x1 single} {23x1 single} {20x1 single} {20x1 single} {22x1 single} {10x1 single} {11x1 single} {14x1 single} {11x1 single} {15x1 single} {22x1 single} {17x1 single} {21x1 single} {18x1 single} {17x1 single} {11x1 single} {14x1 single} {10x1 single} {20x1 single} {13x1 single} {20x1 single} {17x1 single} {14x1 single} {17x1 single} {13x1 single} { 6x1 single} {15x1 single} { 5x1 single} {14x1 single} {27x1 single} { 9x1 single} {19x1 single} {15x1 single} {12x1 single} {14x1 single} { 6x1 single} { 9x1 single} {10x1 single} { 7x1 single} {23x1 single} {29x1 single} { 7x1 single} {19x1 single} {14x1 single} {12x1 single} { 5x1 single} { 6x1 single} { 7x1 single} {16x1 single} {10x1 single} {20x1 single} {22x1 single} { 6x1 single} {17x1 single} {14x1 single} {10x1 single} { 7x1 single} {13x1 single} {16x1 single} {20x1 single} { 8x1 single} {18x1 single} {19x1 single} { 5x1 single} {15x1 single} { 4x1 single} {13x1 single} {16x1 single} {21x1 single} {20x1 single} {20x1 single} { 7x1 single} {15x1 single} {17x1 single} { 4x1 single} { 4x1 single} { 8x1 single} {[ 0.5438]} {19x1 single} {20x1 single} {17x1 single} {15x1 single} { 6x1 single} {12x1 single} {10x1 single} { 3x1 single} { 9x1 single} { 0x0 double} {[ 0.5438]} {19x1 single} {14x1 single} {14x1 single} {11x1 single} { 4x1 single} { 8x1 single} {[ 0.5440]} { 8x1 single} { 0x0 double} { 0x0 double} {[ 0.5438]} {18x1 single} { 9x1 single} {11x1 single} { 9x1 single} {[ 0.5443]} { 0x0 double} { 4x1 single} { 0x0 double} { 0x0 double} { 0x0 double} {[ 0.5438]} {13x1 single} { 3x1 single} { 5x1 single} { 0x0 double} { 0x0 double} { 4x1 single} { 0x0 double} { 0x0 double} { 0x0 double} { 0x0 double} {[ 0.5438]} { 7x1 single} { 0x0 double} { 0x0 double} { 0x0 double} {[ 0.5441]}
F = @(c)vertcat(c{:});
C = cellfun(F,num2cell(C,1),'uni',0)
C = 1x20 cell array
Columns 1 through 9 {485132x1 single} {101x1 single} {119x1 single} {121x1 single} {101x1 single} {146x1 single} {176x1 single} {182x1 single} {169x1 single} Columns 10 through 19 {151x1 single} {123x1 single} {171x1 single} {209x1 single} {226x1 single} {218x1 single} {212x1 single} {198x1 single} {173x1 single} {98x1 single} Column 20 {145x1 single}
  2 commentaires
Leo Pio D'Adderio
Leo Pio D'Adderio le 25 Fév 2025
Hi Stephen,
thanks! It work perfectly. However, it seems that the "for loop version" that you put as first answer (I suppose you removed it) works faster than this.
Anyway, I am very grateful for the help.
Stephen23
Stephen23 le 25 Fév 2025
"However, it seems that the "for loop version" that you put as first answer (I suppose you removed it) works faster than this."
Yes, I would expect that a well-written FOR-loop would be faster than CELLFUN. Unfortunately there is a persistent myth that loops should be avoided in all cases... I have no idea why this myth is so persistent.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by