在 Python 中创建任意维度的稀疏矩阵 3

Create arbitrary dimension sparse matrix in Python 3

所以我使用 Python 3 创建一个矩阵

L=[B 0 0
   0 B 0
   0 0 B]

哪里

B=[4 -1  0
  -1  4 -1
   0 -1  4]

但是我不想重复 B 次,而是想重复 N 次(取决于输入)。到目前为止,我的镜头如下

import numpy as np
import scipy.sparse as sp

one=np.ones(N)
four=4*np.ones(N)
data = np.array([-one, four, -one])
diags = np.array([-1,0, 1])
B=sp.spdiags(data, diags, N, N).toarray() # Create matrix B

L=np.kron(np.eye(N), B)

但是,当N很大时(因为这是求解微分方程,这是必要的),它会花费很多时间。有更有效的方法吗?

这里没有计时(我没有性能保证),但对我来说最自然的方法(没有太多使用 kronecker 的经验)是 scipy 的 block_diag 虽然我总是想知道我是否正确使用它(在这种情况下:列表理解):

代码

import numpy as np
import scipy.sparse as sp

N = 2
B = np.array([[4,-1,0],[-1,4,-1],[0,-1,4]])
L = sp.block_diag([B for i in range(N)])

print(L.todense())

出局

[[ 4 -1  0  0  0  0]
 [-1  4 -1  0  0  0]
 [ 0 -1  4  0  0  0]
 [ 0  0  0  4 -1  0]
 [ 0  0  0 -1  4 -1]
 [ 0  0  0  0 -1  4]]