I was reminded of this by another thread.
It is faster to add in-place a large size storage=sparse float[8] Matrix into a new empty storage=rectangular float[8] Matrix than it is to convert it that way using the Matrix() or rtable() constructors.
Here's an example. First I'll do it with in-place Matrix addition. And then after that with a call to Matrix(). I measure the time to execute as well as the increase in bytes-allocated and bytes-used.
> with(LinearAlgebra):
> N := 500:
> A := RandomMatrix(N,'density'=0.1,
> 'outputoptions'=['storage'='sparse',
> 'datatype'=float[8]]):
> st,ba,bu := time(),kernelopts(bytesalloc),kernelopts(bytesused):
> B := Matrix(N,'datatype'=float[8]):
> MatrixAdd(B,A,'inplace'=true):
> time()-st,kernelopts(bytesalloc)-ba,kernelopts(bytesused)-bu;
0.022, 2489912, 357907