Preallocating cells with unknown output size
8 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Joel Schelander
el 12 de Abr. de 2021
Comentada: Bruno Luong
el 12 de Abr. de 2021
I need to optimize my script. A thing I could do is preallocating, however the size of my output cell is unknown so my question is if it is worth it.
the output of the script is X, the size of X is not known.
Now I have:
X={};
*my script
X=nxn cell
If the output cell has the size 2x2 for example, can I do something like this:
not sure if it will increase the speed of my script
X=cell(999);
*my script
X=999x999 cell
*somehow reduce the size of X
X=2x2 cell
5 comentarios
Bruno Luong
el 12 de Abr. de 2021
10 millions by 10 million cell?
I don't believe any existing HW can support that at the moment.
Respuesta aceptada
Bruno Luong
el 12 de Abr. de 2021
Editada: Bruno Luong
el 12 de Abr. de 2021
If the size is not known, a good way is the to grow the preallocation array exponentially.
Rather than the assigment
X{i,j} = value;
Call
X = gassign(X,i,j,value);
where gassign implemented as follow
function X = gassign(X, i, j, val)
[m,n] = size(X);
if (i > m) || (j > n)
gidx = @(s,k) max(max(2*s,s+1),k);
X(gidx(m,i),gidx(n,j)) = {[]};
end
X{i,j} = val;
end
Then when finish truncate X to remove not filled cells.
You can start the script with X initialized as
X = {};
0 comentarios
Más respuestas (1)
KSSV
el 12 de Abr. de 2021
You can try to initilize them as
X = cell([],[]) ;
You can check the timing using tic , toc.
0 comentarios
Ver también
Categorías
Más información sobre Matrix Indexing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!