我的系统最好用对角稀疏矩阵(泊松)来描述。我有我的对角稀疏矩阵,但是,我想将边界条件(即矩阵的“边缘”)更改为零。建模者想要在具有不同边界条件的稀疏对角矩阵中描述系统一定是一种常见情况,是否有这样做的最佳实践?
[[0,0,0,0,..0],
[0,2,1,0,..0],
[0,1,2,1,..0],
...
[0,0,0,0,..0]]
我的系统最好用对角稀疏矩阵(泊松)来描述。我有我的对角稀疏矩阵,但是,我想将边界条件(即矩阵的“边缘”)更改为零。建模者想要在具有不同边界条件的稀疏对角矩阵中描述系统一定是一种常见情况,是否有这样做的最佳实践?
[[0,0,0,0,..0],
[0,2,1,0,..0],
[0,1,2,1,..0],
...
[0,0,0,0,..0]]
这取决于您使用哪种稀疏矩阵格式。显然lil_matrix
并且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:仅供参考,您的矩阵称为tridiagonal,而不是对角线。