python 实现方阵的对角线遍历示例


Posted in Python onNovember 29, 2019

任务描述

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

从矩阵索引入手:

[[ 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 相关文章推荐
跟老齐学Python之集合的关系
Sep 24 Python
python使用Image处理图片常用技巧分析
Jun 01 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
Jun 02 Python
Python递归函数实例讲解
Feb 27 Python
Python中一个for循环循环多个变量的示例
Jul 16 Python
python tkinter组件摆放方式详解
Sep 16 Python
3种python调用其他脚本的方法
Jan 06 Python
如何通过python实现人脸识别验证
Jan 17 Python
pandas to_excel 添加颜色操作
Jul 14 Python
python生成word合同的实例方法
Jan 12 Python
pytorch 如何使用amp进行混合精度训练
May 24 Python
关于的python五子棋的算法
May 02 Python
python 实现一个反向单位矩阵示例
Nov 29 #Python
python 实现矩阵填充0的例子
Nov 29 #Python
python循环嵌套的多种使用方法解析
Nov 29 #Python
python写一个随机点名软件的实例
Nov 28 #Python
关于Python-faker的函数效果一览
Nov 28 #Python
python 监测内存和cpu的使用率实例
Nov 28 #Python
python随机生成库faker库api实例详解
Nov 28 #Python
You might like
php与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
php面向对象值单例模式
2016/05/03 PHP
php实现用户注册密码的crypt加密
2017/06/08 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
js利用与或运算符优先级实现if else条件判断表达式
2010/04/15 Javascript
javascript的BOM汇总
2015/07/16 Javascript
javascript实现tab切换特效
2015/11/12 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
详解Axios 如何取消已发送的请求
2018/10/20 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
小程序实现tab标签页
2020/11/16 Javascript
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
在Python程序中实现分布式进程的教程
2015/04/28 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
Python异常处理操作实例详解
2018/08/28 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
4s店总经理岗位职责
2013/12/31 职场文书
语文教学随笔感言
2014/02/18 职场文书
运动会通讯稿500字
2014/02/20 职场文书
《燕子专列》教学反思
2014/02/21 职场文书
岗位工作说明书
2014/07/29 职场文书
党员证明模板
2015/06/19 职场文书
高中班长竞选稿
2015/11/20 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python
Python Pygame实战之塔防游戏的实现
2022/03/17 Python