Most efficient way to vertically concatenate numeric data?

2 visualizaciones (últimos 30 días)
SA-W
SA-W el 1 de Abr. de 2025
Comentada: Walter Roberson el 3 de Abr. de 2025
In the profiled output picture below, mergedDataPerRank is a cell array storing 53 double matrices with size (6300, 33). Using vertcat, it takes approx. 0.5 seconds (20 calls) to vertically concatenate the data. Is there a more efficient way to do this or is 0.5 seconds already fairly good?
  4 comentarios
Konstantin
Konstantin el 3 de Abr. de 2025
Editada: Konstantin el 3 de Abr. de 2025
But what is "Merge_filesAcrossRanks"? It looks like it is some your own custom function to read a lot of files in a given directory. If it is so (and if the size of all tables is quaranteed a priori), then I would recommend to combine reading and merging: just preallocate the whole final matrix (53*6300 tall, 33 wide), create a "current position (line)" variable, and then read files into this table while advancing the "current position".
Walter Roberson
Walter Roberson el 3 de Abr. de 2025
That approach turns out to be slower.
nmat = 53;
nrow = 6300;
ncol = 33;
rng(12345)
tic
C = cell(nmat, 1);
for K = 1 : nmat; C{K} = rand(nrow, ncol); end
R1 = vertcat(C{:});
t1 = toc;
rng(12345);
R2 = zeros(nmat*nrow,ncol);
counter = 1;
for K = 1 : nmat; R2(counter:counter+nrow-1,:) = rand(nrow, ncol); counter = counter + nrow; end
t2 = toc;
format long g
[t1, t2]
ans = 1×2
0.159601 0.273057
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

Iniciar sesión para comentar.

Respuestas (0)

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by