python 實現方陣的對角線遍歷示例
更新時間:2019年11月29日 09:15:56 作者:icaoys
今天小編就為大家分享一篇python 實現方陣的對角線遍歷示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
任務描述
對一個方陣矩陣,實現平行于主對角線方向的對角線元素遍歷。
從矩陣索引入手:
[[ 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)
上述代碼中對于每條對角線的所有元素執(zhí)行相同的賦值操作。
考慮將其中重復的部分封裝成函數:
def diag_opreation(k, i, Num_element, R, A): c = int((Num_element-1)/2) 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 return R
則代碼變?yōu)椋?/strong>
for j in range(Num_element): print() i = 0 # print(i, j) R = diag_opreation(i, j, Num_element, R, A) # print(R) for k in range(1, Num_element): print() i = 0 # print(i, j) R = diag_opreation(k, i, Num_element, R, 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 實現方陣的對角線遍歷示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python lambda 匿名函數優(yōu)點和局限性深度總結
這篇文章主要為大家介紹了Python lambda 匿名函數的優(yōu)點和局限性深度總結,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08