我的系统用对角线稀疏矩阵(泊松)来描述是最好的。我有我的对角稀疏矩阵,但是,我想将边界条件(即矩阵的“边”)改为零。这一定是一种常见的情况,建模者想要用具有不同边界条件的稀疏对角矩阵来描述系统,有没有这样做的最佳实践?
[[0,0,0,0,..0],
[0,2,1,0,..0],
[0,1,2,1,..0],
...
[0,0,0,0,..0]]
发布于 2012-04-27 04:30:57
这取决于您使用的稀疏矩阵格式。显然,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:仅供参考,您的矩阵称为tridiagonal,而不是对角线。
https://stackoverflow.com/questions/10340517
复制相似问题