首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将matlab代码转换为python以创建矩阵

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

Stack Overflow用户
提问于 2014-04-13 10:55:10
回答 1查看 355关注 0票数 2

我很难在python中创建以下矩阵:

代码语言:javascript
复制
| 1 -2  1  0 ...  0  |
| 0  1 -2  1 ... ... |
|... ... ... ...  0  |
| 0  ... 0  1 -2  1  |

下面有matlab代码,它似乎创建了这个矩阵(文章),但是我不能用python代码来转换它。

Matlab代码:

代码语言:javascript
复制
D2 = spdiags(ones(T-2,1)*[1 -2 1],[0:2],T-2,T);

T是列的数目。

python中的代码如下所示:

代码语言:javascript
复制
from scipy.sparse import spdiags
D2 = spdiags( (ones((T-2,1))*array([1,-2,1])),arange(0,3),T-2,T)

后者产生以下错误:

ValueError:对角数(327)与偏移数不匹配(3)

但如果我像这样把矩阵转过来:

代码语言:javascript
复制
D2 = spdiags( (ones((T-2,1))*array([1,-2,1])).T,arange(0,3),T-2,T)

我得到以下结果:

代码语言:javascript
复制
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.]])

有人能帮我吗?我哪里错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-13 13:41:59

改变这一点:

代码语言:javascript
复制
D2 = spdiags( (ones((T-2,1))*array([1,-2,1])).T,arange(0,3),T-2,T)

对此:

代码语言:javascript
复制
D2 = spdiags( (ones((T,1))*array([1,-2,1])).T,arange(0,3),T-2,T)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23041832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档