I am filling a sparse matrix P (230k,290k) with values coming from a text file which I read line by line, here is the (simplified) code
while ...
There's a sixth input argument to sparse that tells the number of nonzero elements in the matrix. That's used by Matlab to preallocate:
S = sparse(i,j,s,m,n,nzmax)
uses vectorsi
,j
, ands
to generate anm
-by-n
sparse matrix such thatS(i(k),j(k)) = s(k)
, with space allocated fornzmax
nonzeros.
So you could initiallize with
P = sparse([],[],[],230e3,290e3,nzmax);
You can make a guess about the number of nonzeros (perhaps checking file size?) and use that as nzmax
. If it turns you need more nonzero elements in the end, Matlab will preallocate on the fly (slowly).