Preallocating cells with unknown output size

4 次查看(过去 30 天)
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 个评论
Joel Schelander
Joel Schelander 2021-4-12
The size of X will increase to the magnitude 100 million I think. Right now Im just working with a very small sample to optimize the script.
Bruno Luong
Bruno Luong 2021-4-12
10 millions by 10 million cell?
I don't believe any existing HW can support that at the moment.

请先登录,再进行评论。

采纳的回答

Bruno Luong
Bruno Luong 2021-4-12
编辑:Bruno Luong 2021-4-12
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 = {};

更多回答(1 个)

KSSV
KSSV 2021-4-12
You can try to initilize them as
X = cell([],[]) ;
You can check the timing using tic , toc.

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

标签

产品


版本

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by