在Julia中作为一个参数传递多个参数



我正试图在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

最新更新