3
我掙扎在Python中創建以下列表:轉換MATLAB代碼爲蟒蛇的矩陣構建
| 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: number of diagonals (327) does not match the number of offsets (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值?我並不完全知道發生了什麼,但值得注意的是,當評估第一個表達式時(<3x5稀疏矩陣類型'' \t與9個已存儲的值,T = 5會產生明顯好的結果元素(3個對角線)以Diorgonal格式> )。 –
Daryl
看到http://stackoverflow.com/questions/16030620/translate-matlab-code-to-python-scipy,似乎有人在做同樣的事情,並有他們的問題回答。 – Daryl
我也發現這個問題。但實際上它仍然不適合我。 T可以在100以上。對於較小的T值,我可以看出這是有效的,但似乎並不完全。我預計矩陣的結尾會以'1 2 1'結尾,但實際上您可以看到它以'1 0 0'結尾。我沒有matlab來查看該函數如何創建矩陣。 –