Matrix 如何在JULIA中有效地构造以下形式的块矩阵?

Matrix 如何在JULIA中有效地构造以下形式的块矩阵?,matrix,julia,Matrix,Julia,因此,我正在编写一个代码,要求我构造一个大矩阵M 使用尺寸分别为n x n的较小“方形”矩阵J和M,重复如下操作: i、 e的尺寸为M,使得M沿对角线重复“L”次,J'沿上第二对角线重复,J沿下第二对角线重复 请注意,我正在研究Julia v 1.0.0,据我所知,与Mathematica不同,Julia中没有直接指定块矩阵的方法 我尝试使用Kronecker产品来解决我的问题: BlockArrays.jl (and maybe BlockBandedMatrices.jl) should

因此,我正在编写一个代码,要求我构造一个大矩阵M 使用尺寸分别为n x n的较小“方形”矩阵J和M,重复如下操作:

i、 e的尺寸为M,使得M沿对角线重复“L”次,J'沿上第二对角线重复,J沿下第二对角线重复

请注意,我正在研究Julia v 1.0.0,据我所知,与Mathematica不同,Julia中没有直接指定块矩阵的方法

我尝试使用Kronecker产品来解决我的问题:

 BlockArrays.jl (and maybe BlockBandedMatrices.jl) should be what you are looking for as it makes handling block matrix structures very convenient.

An example (with
Strings
s):

julia> using BlockArrays

julia> M = fill("M", 2,2);

julia> J = fill("J", 2,2);

julia> B = BlockArray{String}(undef_blocks, [2,2], [2,2])
4×4 BlockArray{String,2,Array{String,2}}:
 #undef  #undef  │  #undef  #undef
 #undef  #undef  │  #undef  #undef
 ────────────────┼────────────────
 #undef  #undef  │  #undef  #undef
 #undef  #undef  │  #undef  #undef

julia> setblock!(B, M, 1,1);

julia> setblock!(B, M, 2,2);

julia> setblock!(B, J, 1,2);

julia> setblock!(B, J, 2,1);

julia> B
4×4 BlockArray{String,2,Array{String,2}}:
 "M"  "M"  │  "J"  "J"
 "M"  "M"  │  "J"  "J"
 ──────────┼──────────
 "J"  "J"  │  "M"  "M"
 "J"  "J"  │  "M"  "M"
(也许)应该是您想要的,因为它使处理块矩阵结构非常方便

示例(带
字符串
s):


有关更多信息,请查看软件包的。

您也可以在不使用任何外部软件包的情况下执行此操作,例如:

8×8 Array{Int64,2}:
  1   3  -1  -2   0   0   0   0
  2   4  -3  -4   0   0   0   0
 -1  -3   1   3  -1  -2   0   0
 -2  -4   2   4  -3  -4   0   0
  0   0  -1  -3   1   3  -1  -2
  0   0  -2  -4   2   4  -3  -4
  0   0   0   0  -1  -3   1   3
  0   0   0   0  -2  -4   2   4
最终矩阵
bM
为:


不确定与其他答案相比效率如何,但至少知道它可以在不太复杂的情况下完成可能会很好。

如果您只需要矩阵,您也可以使用文字语法:
[M J;J M]
我想要构造的矩阵实际上是一个非常大的矩阵,因此文字语法是不可能的。然而,正如user@crstnbr所说,我可能能够使用BlockArrays包构造一个函数来定义这样一个矩阵。谢谢
8×8 Array{Int64,2}:
  1   3  -1  -2   0   0   0   0
  2   4  -3  -4   0   0   0   0
 -1  -3   1   3  -1  -2   0   0
 -2  -4   2   4  -3  -4   0   0
  0   0  -1  -3   1   3  -1  -2
  0   0  -2  -4   2   4  -3  -4
  0   0   0   0  -1  -3   1   3
  0   0   0   0  -2  -4   2   4