[英]how to make a matrix in python?
你有幾個選擇....
您可以通過鍵入行來“手動堵塞”整個內容。 (您可能已經知道這一點。)
D = [[-2, 1, 0, ...], [...]]
您可以創建一個較小的矩陣來表示紅色虛線框(子矩陣)中的內容,然后只需用 D 中的適當范圍覆蓋它們來替換D
中的值(您可以做一個小循環以通過步進 3 來點擊正確的索引進行替換...)(未顯示):
In [30]: D
Out[30]:
array([[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.]])
In [31]: temp = [[-2, 1, 0],
...: [1, -2, 1],
...: [0, 1, -2]]
In [32]: D[0:3,0:3] = temp
In [33]: D
Out[33]:
array([[-2., 1., 0., 0., 0., 0., 0., 0., 0.],
[ 1., -2., 1., 0., 0., 0., 0., 0., 0.],
[ 0., 1., -2., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
In [34]: D = np.zeros((n,n))
In [35]: for i in range(n):
...: for j in range(n):
...: if i==j:
...: D[i,j]=-2
...: elif np.abs(i-j)==1:
...: if (i+j-5) % 6 == 0:
...: D[i,j]=0
...: else:
...: D[i,j]=1
...:
In [36]: D
Out[36]:
array([[-2., 1., 0., 0., 0., 0., 0., 0., 0.],
[ 1., -2., 1., 0., 0., 0., 0., 0., 0.],
[ 0., 1., -2., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., -2., 1., 0., 0., 0., 0.],
[ 0., 0., 0., 1., -2., 1., 0., 0., 0.],
[ 0., 0., 0., 0., 1., -2., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., -2., 1., 0.],
[ 0., 0., 0., 0., 0., 0., 1., -2., 1.],
[ 0., 0., 0., 0., 0., 0., 0., 1., -2.]])
一種方法是從對角線構建它。 簡答
m=np.roll(np.diag(([1]*(N-1)+[0])*N), 1)-np.identity(N**2)
m+m.T
np.diag(([1]*(N-1)+[0])*N)
是
array([[1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]])
如果你滾動它 1(向右)
np.roll(np.diag(([1]*(N-1)+[0])*N), 1)
array([[0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0]])
如果我們從中刪除身份
m=np.roll(np.diag(([1]*(N-1)+[0])*N), 1)-np.identity(N**2)
m
array([[-1, 1, 0, 0, 0, 0, 0, 0, 0],
[ 0, -1, 1, 0, 0, 0, 0, 0, 0],
[ 0, 0, -1, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, -1, 1, 0, 0, 0, 0],
[ 0, 0, 0, 0, -1, 1, 0, 0, 0],
[ 0, 0, 0, 0, 0, -1, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, -1, 1, 0],
[ 0, 0, 0, 0, 0, 0, 0, -1, 1],
[ 0, 0, 0, 0, 0, 0, 0, 0, -1]])
我們已經中途了。 我們需要雙對角線,並添加對稱的。 我們可以輕松做到
m+m.T
array([[-2, 1, 0, 0, 0, 0, 0, 0, 0],
[ 1, -2, 1, 0, 0, 0, 0, 0, 0],
[ 0, 1, -2, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, -2, 1, 0, 0, 0, 0],
[ 0, 0, 0, 1, -2, 1, 0, 0, 0],
[ 0, 0, 0, 0, 1, -2, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, -2, 1, 0],
[ 0, 0, 0, 0, 0, 0, 1, -2, 1],
[ 0, 0, 0, 0, 0, 0, 0, 1, -2]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.