2013-12-18 63 views
1

我想填充100x100矩陣上的對角線元素,如下面的matlab代碼所示,所以如何在python中複製它。在蟒蛇100×100的矩陣中,填充掉對角線元素

T=(2*t0*diag(ones(1,100)))-(t0*diag(ones(1,99),1))-(t0*diag(ones(1,99),-1)) 

所以我知道RHS的第一項將填補對角矩陣與價值2*t0

我在蟒蛇操作如下:

x = np.zeros((100,100)) 
np.fill_diagonal(x,2*t0) 

,但我不我不知道如何去做第二和第三項,我知道他們會填充對角元素上下的值,值爲-t0,而不是所有的關閉對角線值,但只填充對角元素的上限值和下限值 - t0,休息都是零,但我不知道如何爲它編寫python代碼。

我發現這個代碼:

# diagonal with offset from the main diagonal 
diag([1,2,3], k=1) 

會給作爲輸出:

array([[0, 1, 0, 0], 
[0, 0, 2, 0], 
[0, 0, 0, 3], 
[0, 0, 0, 0]]) 

,但如何應用它的一個大矩陣在我的問題的情況下? 我在交互式python中工作,即Anaconda,所以哪些是我可以用於我的問題的其他軟件包?

+5

未來('numpy version 1.10'),你可以用['numpy.diagonal']很容易地做到這一點(http://docs.scipy.org/doc/numpy/reference/generated/ numpy.diagonal.html#numpy.diagonal)。不幸的是,未來還沒有到這裏呢...... – mgilson

+0

未來就是[這裏](https://stackoverflow.com/a/35022497/1150462)現在 – xuhdev

回答

4

從您在此處提供np.diag什麼,這是很容易做到:

a = np.ones((1, 100))[0] 
b = np.ones((1, 99))[0] 
m = np.diag(a, 0) + np.diag(b, -1) + np.diag(b, 1) 

m這裏是100x100的三對角矩陣

更新:

我找到了一個鏈接here上類似的問題,看一看。

+0

謝謝ray,你的回覆一直很幫忙! – Cliff

+0

@ user3048426不客氣。如果這正是你正在尋找的,請考慮接受我的答案。 :) – Ray