稀疏矩阵模式上的Scipy边界条件

时间:2012-04-26 19:56:57

标签: python numpy scipy sparse-matrix boundary

我的系统最好用对角稀疏矩阵(泊松)来描述。我有对角稀疏矩阵,但是,我想将边界条件(即矩阵的“边缘”)更改为零。它必须是建模者想要在具有明显边界条件的稀疏对角矩阵中描述系统的常见情况,这样做是否有最佳实践?

[[0,0,0,0,..0],
 [0,2,1,0,..0],
 [0,1,2,1,..0],
 ...
 [0,0,0,0,..0]]

1 个答案:

答案 0 :(得分:0)

这取决于您使用的稀疏矩阵格式。显然lil_matrix and dok_matrix可以使用切片分配。

  

要有效构建矩阵,请使用lil_matrix(推荐)   或者dok_matrix。 lil_matrix类支持基本切片和花哨   使用与NumPy数组类似的语法进行索引。

这使得这很容易:

In : x = scipy.sparse.lil_matrix(np.ones((6,6)))

In : x.todense()
Out:
matrix([[ 1.,  1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.,  1.,  1.]])

In : x[:, 0] = 0

In : x[:, -1] = 0

In : x[0, :] = 0

In : x[-1, :] = 0

In : x.todense()
Out:
matrix([[ 0.,  0.,  0.,  0.,  0.,  0.],
        [ 0.,  1.,  1.,  1.,  1.,  0.],
        [ 0.,  1.,  1.,  1.,  1.,  0.],
        [ 0.,  1.,  1.,  1.,  1.,  0.],
        [ 0.,  1.,  1.,  1.,  1.,  0.],
        [ 0.,  0.,  0.,  0.,  0.,  0.]])

PS:FYI,您的矩阵称为tridiagonal,而不是对角线。