温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用python怎么遍历方阵的对角线

发布时间:2021-04-14 16:12:07 来源:亿速云 阅读:298 作者:Leah 栏目:开发技术

这期内容当中小编将会给大家带来有关使用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)

上述代码中对于每条对角线的所有元素执行相同的赋值操作。

考虑将其中重复的部分封装成函数:

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

则代码变为:

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怎么遍历方阵的对角线了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI