Python实现方阵平行于主对角线的元素遍历算法

今天早睡
今天早睡
发布时间:2026-10-13 | 4人浏览过
原创

本文介绍如何在Python中实现平行于主对角线方向的方阵元素遍历。通过解析上三角与下三角区域的索引规律,利用NumPy库构建5x5示例矩阵,并演示如何对每条对角线元素执行赋值或平均操作。文章提供了基础循环实现及封装函数后的优化代码,展示完整的索引遍历逻辑与最终输出结果,适用于需要处理矩阵对角线数据的场景。

任务描述与遍历目标

任务描述

针对一个方阵矩阵,实现沿平行于主对角线方向的对角线元素遍历功能。

首先从矩阵的索引规律入手进行分析:

矩阵索引规律分析


[[ 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实现方阵对角线遍历的示例内容到此结束,希望能为相关开发者提供有价值的参考。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表