I’m looking for a function to construct a sparse matrix based on several blocks of smaller sparse matrices.
An simple example:
A11=A12=A21=A22=sprandn(4,2,0.6)
The final sparse matrix A should be a combination of these 4 blocks like:
A11 A12
A21 A22
blockdiag()
doesn’t help directly here since it only returns block diagonal matrix. And the matrices I worked with are pretty large. So I do care about the performance of such operation.
Is normal concatenation not good/fast enough?
julia> A11 = A12 = A21 = A22 = sprand(4, 4, 0.6);
julia> A = [A11 A12;
A21 A22];
That’s what I’m looking for! Thank you!!
What do I do when the number of blocks are dynamic?
[ ]
is just helpful syntax for the functions vcat
, hcat
, and hvcat
, so you can just call those yourself:
julia> blocks = [eye(2) for _ in 1:6]
julia> hcat(blocks...)
2×12 Array{Float64,2}:
1.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0
0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0
julia> vcat(blocks...)
12×2 Array{Float64,2}:
1.0 0.0
0.0 1.0
1.0 0.0
0.0 1.0
1.0 0.0
0.0 1.0
1.0 0.0
0.0 1.0
1.0 0.0
0.0 1.0
1.0 0.0
0.0 1.0
julia> hvcat((3, 3), blocks...)
4×6 Array{Float64,2}:
1.0 0.0 1.0 0.0 1.0 0.0
0.0 1.0 0.0 1.0 0.0 1.0
1.0 0.0 1.0 0.0 1.0 0.0
0.0 1.0 0.0 1.0 0.0 1.0
julia> hvcat((2, 2, 2), blocks...)
6×4 Array{Float64,2}:
1.0 0.0 1.0 0.0
0.0 1.0 0.0 1.0
1.0 0.0 1.0 0.0
0.0 1.0 0.0 1.0
1.0 0.0 1.0 0.0
0.0 1.0 0.0 1.0
3 Likes