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