在Julia中创建具有理解力的双对角矩阵

nic*_*vid 1 julia

如何通过理解在朱莉娅中重新创建这个双对角矩阵?

  1   0   0
 -1   1   0
  0  -1   1
  0   0  -1
Run Code Online (Sandbox Code Playgroud)

Mat*_* B. 8

使用理解创建一个密集的数组,它可以是非正方形:

julia> M = 4; N = 3;
       [i==j ? 1 : i==j+1 ? -1 : 0 for i = 1:M, j=1:N]
4x3 Array{Int64,2}:
  1   0   0
 -1   1   0
  0  -1   1
  0   0  -1
Run Code Online (Sandbox Code Playgroud)

或者您可以使用Bidiagonal方阵:

julia> M = 4;
       Bidiagonal(ones(Int, M), -ones(Int, M-1), false) # false means that it's not an upper-diagonal
4x4 Bidiagonal{Int64}:
  1   0   0  0
 -1   1   0  0
  0  -1   1  0
  0   0  -1  1
Run Code Online (Sandbox Code Playgroud)

后者有一些专门的线性代数方法,可以使它更有效.