inefficient loop to vertically concatenate tables

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

 採用された回答

Jos (10584)
Jos (10584) 2019 年 8 月 8 日

1 投票

You can apply comma-separated list expansion to tables too, so this one-liner should work.
tableBig = cat(1, output{:,2})

5 件のコメント

Guillaume
Guillaume 2019 年 8 月 8 日
or
tableBig = vertcat(output{:, 2})
Jos (10584)
Jos (10584) 2019 年 8 月 8 日
I always forget about all those fancy newer functions that are wrappers around the basic ones ;-D
Daniel Pinto
Daniel Pinto 2019 年 8 月 8 日
Thanks to both. However, when I do that, I get the following. I would like to have as an output all the contents of the small tables, i.e., a very long table with 3 columns.
I'd like to have the contents of the 6 by 3 matrix below the contents of the 12 by 3 matrix and so on.
Is that feasible?
Screenshot 2019-08-08 at 12.12.29.png
Guillaume
Guillaume 2019 年 8 月 8 日
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.
Daniel Pinto
Daniel Pinto 2019 年 8 月 8 日
thanks a lot! that works.
my code is still not working properly, so I have added the full description of my problem and my goal here:
If you have time, please read it! thanks!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeLoops and Conditional Statements についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by