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

时间:2018-01-17 14:51:53

标签: python python-3.x scipy sparse-matrix

所以我使用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很大时需要花费很多时间(这是必要的,因为这是解决微分方程)。有没有更有效的方法来做到这一点?

1 个答案:

答案 0 :(得分:2)

这里没有时间(我没有性能保证),但对我来说,最自然的方法(对kronecker没有多少经验)将是scipy的block_diag虽然我总是想知道我是否正确使用它(在这种情况下:list-comprehension):

代码

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]]