python 實現方陣的對角線遍歷示例
阿新 • • 發佈:2020-01-09
任務描述
對一個方陣矩陣,實現平行於主對角線方向的對角線元素遍歷。
從矩陣索引入手:
[[ 1 2 3 4 5] [ 6 7 8 9 10] [11 12 13 14 15] [16 17 18 19 20] [21 22 23 24 25]]
上三角的索引遍歷:
0 0 1 1 2 2 3 3 4 4 0 1 1 2 2 3 3 4 0 2 1 3 2 4 0 3 1 4 0 4
下三角的索引遍歷:
1 0 2 1 3 2 4 3 2 0 3 1 4 2 3 0 4 1 4 0
程式碼
import numpy as np A = np.arange(25)+1 A = np.mat(A.reshape([5,5])) print(A) """ [[ 1 2 3 4 5] [ 6 7 8 9 10] [11 12 13 14 15] [16 17 18 19 20] [21 22 23 24 25]] """ Num_element = A.shape[0] c = int((Num_element-1)/2) # print(c) R = np.zeros_like(A) # print(R) for j in range(Num_element): print() i = 0 # print(i,j) while np.max([i,j])<Num_element: print(i,j) if np.abs(i-j)%2==0: R[i,j] = A[c-int((j-i)/2),c+int((j-i)/2)] else: R[i,j] = (A[c-int((j-i-1)/2),c+int((j-i+1)/2)]+A[c-int((j-i+1)/2),c+int((j-i-1)/2)])/2 i=i+1 j=j+1 # print(R) for k in range(1,Num_element): print() i = 0 # print(i,j) while np.max([k,i])<Num_element: print(k,i) if np.abs(k-i)%2==0: R[k,i] = A[c-int((i-k)/2),c+int((i-k)/2)] else: R[k,i] = (A[c-int((i-k-1)/2),c+int((i-k+1)/2)]+A[c-int((i-k+1)/2),c+int((i-k-1)/2)])/2 k=k+1 i=i+1 print(R)
上述程式碼中對於每條對角線的所有元素執行相同的賦值操作。
考慮將其中重複的部分封裝成函式:
def diag_opreation(k,i,Num_element,R,A): c = int((Num_element-1)/2) while np.max([k,c+int((i-k-1)/2)])/2 k=k+1 i=i+1 return R
則程式碼變為:
for j in range(Num_element): print() i = 0 # print(i,j) R = diag_opreation(i,j,A) # print(R) for k in range(1,j) R = diag_opreation(k,A) print(R)
輸出結果為:
[[13 11 9 7 5] [15 13 11 9 7] [17 15 13 11 9] [19 17 15 13 11] [21 19 17 15 13]]
以上這篇python 實現方陣的對角線遍歷示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。