In my work I frequently have to calculate a long sequence (about N=10^6) of small matrices (about 3x3) that are defined recursively like X_t = f(X_{t-1})
. The object of interest is the entire chain of matrices so I need to calculate and save each of them. I can usually write an efficient version of f()
that can do all the calculations in place. A simplified version of this algorithm is below. My main question is what is the most efficient way to store the sequence of matrices X
and to access each sub matrix X
as I iterate through the chain. I’ve tried several different ways of laying out the X
object but haven’t found a way that doesn’t lead to a bunch of allocations along in the for loop. Thanks.
using LinearAlgebra
function update!(X, A)
for k in 2:100
@views mul!(X[:,:,k], X[:,:,k - 1], A)
end
end
function run()
X = ones(2, 2, 100)
A = [0.5 0.5; 0.25 0.75]
@time update!(X, A)
end
run()