我很难在python中创建以下矩阵:
| 1 -2 1 0 ... 0 |
| 0 1 -2 1 ... ... |
|... ... ... ... 0 |
| 0 ... 0 1 -2 1 |下面有matlab代码,它似乎创建了这个矩阵(文章),但是我不能用python代码来转换它。
Matlab代码:
D2 = spdiags(ones(T-2,1)*[1 -2 1],[0:2],T-2,T);T是列的数目。
python中的代码如下所示:
from scipy.sparse import spdiags
D2 = spdiags( (ones((T-2,1))*array([1,-2,1])),arange(0,3),T-2,T)后者产生以下错误:
ValueError:对角数(327)与偏移数不匹配(3)
但如果我像这样把矩阵转过来:
D2 = spdiags( (ones((T-2,1))*array([1,-2,1])).T,arange(0,3),T-2,T)我得到以下结果:
matrix([[ 1., -2., 1., ..., 0., 0., 0.],
[ 0., 1., -2., ..., 0., 0., 0.],
[ 0., 0., 1., ..., 0., 0., 0.],
...,
[ 0., 0., 0., ..., 1., 0., 0.],
[ 0., 0., 0., ..., -2., 0., 0.],
[ 0., 0., 0., ..., 1., 0., 0.]])有人能帮我吗?我哪里错了?
发布于 2014-04-13 13:41:59
改变这一点:
D2 = spdiags( (ones((T-2,1))*array([1,-2,1])).T,arange(0,3),T-2,T)对此:
D2 = spdiags( (ones((T,1))*array([1,-2,1])).T,arange(0,3),T-2,T)也就是说,您希望第一个参数中的行长度(即包含对角线的数组)等于结果中的列数。
https://stackoverflow.com/questions/23041832
复制相似问题