【发布时间】:2014-05-27 08:02:31
【问题描述】:
我正在努力在 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.]])
有人可以帮助我吗?我哪里错了?
【问题讨论】:
-
您使用什么 T 值?我不完全确定发生了什么,但值得注意的是,当评估第一个表达式时,T=5 会产生一个明显 OK 的结果(',包含 9 个存储元素( 3 条对角线) DIAgonal 格式>).
-
见stackoverflow.com/questions/16030620/…,似乎其他人也在做同样的事情并且他们的问题得到了解答。
-
我也发现了这个问题。但实际上它仍然对我不起作用。 T 可以高于 100。使用较小的 T 值,我可以看到这可行,但似乎并不完全。我预计矩阵的结尾以“1 -2 1”结尾,但实际上如您所见,它以“1 0 0”结尾。我没有 matlab 来查看这个函数究竟是如何创建矩阵的。
标签: python matlab matrix scipy