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

将matlab代码转换为python以创建矩阵,python,matlab,matrix,scipy,Python,Matlab,Matrix,Scipy,我正在努力用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中的代码如下所示: 来自scipy.spdia

我正在努力用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中的代码如下所示:

来自scipy.spdiags
D2=spdiags((一((T-2,1))*数组([1,-2,1])),arange(0,3),T-2,T)
后者会产生以下错误:

ValueError:对角线数(327)与 补偿(3)

但如果我像这样变换矩阵:

D2=spdiags((T-2,1))*数组([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.]])
有人能帮我吗?我哪里错了?

改变这个:

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)

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

您使用的是什么T值?我不完全确定发生了什么,但值得注意的是,当计算第一个表达式()时,T=5会产生一个明显正常的结果。看,似乎其他人也在做同样的事情,并回答了他们的问题。我也发现了这个问题。但事实上,这对我还是不起作用。T可以超过100。对于较小的T值,我可以看出这是可行的,但似乎不完全可行。我期望矩阵的结尾以“1-21”结尾,但实际上正如您所看到的,它以“10”结尾。我没有matlab来了解这个函数是如何创建矩阵的。这就是matlab/octave的区别!我成功地以八度音阶执行了原始代码,最终得到了相同的矩阵和您修复的预期结果。谢谢你,沃伦!