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

Passing multiple arguments as one in 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