Efficient growing and shrinking of positive definite matrices thanks to preallocated memory.
In addition to the functions defined in the common PDMats
interface,
ElasticPDMat <: AbstractPDMat
can grow with append!
a = rand(10, 10); m = a'a;
e = ElasticPDMat(m[1:8, 1:8))
append!(e, m[:, 9:10])
and shrink with deleteat!
deleteat!(e, [3, 8, 7])
Growing and shrinking is usually efficient, because no entries are recomputed
and (basically no) new memory needs to be allocated. ElasticMat(capacity = 10^3, stepsize = 10^3)
allocates capacity x capacity
matrices and creates
(initially 0
-dimensional) views to represent positive definite matrices.
Whenever the current capacity
is reached, e.g. due to several append!
operations, the capacity
increases to capacity += stepsize
. Caution:
increasing the capacity
involves allocating new memory and copying old values,
which is slow. For optimal performance, the capacity
and the stepsize
should
be chosen wisely. For an already initialized e = ElasticPDMat()
they can be
set with the helper functions setcapacity!(e, 100)
and setstepsize!(e, 100)
.
Additionally to ElasticPDMat
this package exports view based elastic arrays of
any dimension AllElasticArray
, ElasticSymmetricMatrix
, ElasticCholesky
and
the helper functions setcapacity!
, setstepsize!
and setdimension!
.