【问题标题】:Passing multiple arguments as one in Julia在 Julia 中将多个参数作为一个参数传递
【发布时间】:2021-08-24 20:10:12
【问题描述】:

我正在尝试在 Julia 中制作对角块矩阵。我有一个nxn 数组,我想将P 复制为对角线下方的块矩阵,而矩阵的其余部分是稀疏的。

如果arr 是我的数组,我知道我可以使用:

blockdiag(sparse(arr),sparse(arr))

创建一个块,该块在对角线上有 P=2 个数组副本。

但是,对于大 P,如何使用变量 P 以一般方式执行此操作?

我尝试制作 (nxnxP) 的数组,但 BlockDiag() 不接受 3D 数组。

【问题讨论】:

    标签: matrix julia sparse-matrix block diagonal


    【解决方案1】:

    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
    

    【讨论】:

    猜你喜欢
    • 2022-11-12
    • 1970-01-01
    • 2016-06-28
    • 2021-09-21
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多