将matlab代码转换为python以进行矩阵创建

时间:2014-04-13 10:55:10

标签: python matlab matrix scipy

我正在努力在python中创建以下矩阵:

| 1 -2  1  0 ...  0  |
| 0  1 -2  1 ... ... |
|... ... ... ...  0  |
| 0  ... 0  1 -2  1  |

我下面的matlab代码似乎创建了这个矩阵(article)但我无法用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.]])

有人可以帮助我吗?我哪里错了?

1 个答案:

答案 0 :(得分:0)

改变这个:

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)

也就是说,您希望第一个参数中的行长度(即包含对角线的数组)等于结果中的列数。