我正试图在Julia中创建一个对角块矩阵。我有一个nxn
数组,我想把它的P
副本作为对角线上的块矩阵,矩阵的其余部分是稀疏的。
如果arr
是我的数组,我知道我可以使用:
blockdiag(sparse(arr),sparse(arr))
以创建具有沿对角线向下的阵列的p=2个副本的块。
然而,对于大p,如何使用变量P
以通用方式实现这一点?
我尝试制作一个为(nxnxP
(的数组,但是BlockDiag()
不接受3D数组。
fill
可以重复元素,而无需实际进行复制。因此你可以做:
blockdiag(fill(sparse(arr), 2)...)
以下是完整的Julia会话:
julia> using SparseArrays
julia> arr=Matrix(sprand(Float64,3,3,0.25))
3×3 Matrix{Float64}:
0.0 0.016897 0.0
0.219705 0.0 0.0
0.0 0.0 0.893547
julia> blockdiag(fill(sparse(arr), 2)...)
6×6 SparseMatrixCSC{Float64, Int64} with 6 stored entries:
⋅ 0.016897 ⋅ ⋅ ⋅ ⋅
0.219705 ⋅ ⋅ ⋅ ⋅ ⋅
⋅ ⋅ 0.893547 ⋅ ⋅ ⋅
⋅ ⋅ ⋅ ⋅ 0.016897 ⋅
⋅ ⋅ ⋅ 0.219705 ⋅ ⋅
⋅ ⋅ ⋅ ⋅ ⋅ 0.893547