大家好我想制作一個看起來像影像的矩陣,我首先做的是創建一個零矩陣然后用 for 我制作了矩陣的對角線但現在我需要制作上方和下方的對角線-2 但在那些沒有單一值的情況下,那些有零和一,所以我不太清楚如何制作它們。
嘗試用這段代碼制作它們

N=3
D2=np.zeros((N**2,N**2))
for i in range(N**2):
for j in range(N**2):
if i==j:
D2[i,j]=-2
elif np.abs(i-j)==1:
D2[i,j]=1
uj5u.com熱心網友回復:
一種方法是從對角線構建它。簡答
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]])
uj5u.com熱心網友回復:
你有幾個選擇....
您可以通過鍵入行來“手動堵塞”整個內容。(您可能已經知道這一點。)
D = [[-2, 1, 0, ...], [...]]
您可以制作一個較小的矩陣來表示您在紅色虛線框(子矩陣)中的內容,然后只需用
DD 中的適當范圍覆寫它們來替換中的值(您可以做一個小回圈來命中通過步進 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.]])
- 您可以在零落點處尋找模式并增加回圈。在這種情況下,每個零位置總共從前一個零移動 6 次(3 個超過,3 個向下),因此如果我們可以錨定第一個零,我們可以使用模運算子將其他出現的 6 歸零移開。第一個零距離 (2,3) 處的原點移動 5(或等價于 (3, 2),因此:
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.]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/534387.html
上一篇:熊貓日期時間字串/串列
下一篇:Pythonexcel資料集轉換
