inefficient loop to vertically concatenate tables
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Daniel Pinto
il 8 Ago 2019
Commentato: Daniel Pinto
il 8 Ago 2019
I have a 300000 by 2 table, called output, that looks like in the screenshot below. Each entry in the 2nd column as inside it a 3-column table with different numbers of rows. I woud like to havee one single table with 3-columns, that is, vertically merge all those little 3-column tables into one.
So far, I was doing:
tableBig = array2table([]);
for ii = 1 : size(output,1)
temp = output{ii,2};
temp = temp{:};
tableBig = [tableBig; temp];
end
The problem is that this loop is a inefficient time wise. The first iterations take in the order of 0.0025 seconds which is not too too bad. But as tableBig gets bigger, iterations seem to take longer and longer, so that projected time based on tic/toc is more than 24 hours.
Is there a way to do this without a loop or to speed up the loop?
Thanks
![Screenshot 2019-08-08 at 11.15.26.png](https://www.mathworks.com/matlabcentral/answers/uploaded_files/233199/Screenshot%202019-08-08%20at%2011.15.26.png)
0 Commenti
Risposta accettata
Jos (10584)
il 8 Ago 2019
You can apply comma-separated list expansion to tables too, so this one-liner should work.
tableBig = cat(1, output{:,2})
5 Commenti
Guillaume
il 8 Ago 2019
Oh, yes of course, the tables are stored inside a cell array in the enclosing table. You'll need another cat|vertcat:
c = vertcat(output{:, 2}); %or cat(1, output{:, 2}); %it's the same
tableBig = vertcat(c{:}); %or cat(1, c{:}); %it's the same
I don't think you can do it efficiently in just one step.
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Numeric Types in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!