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求解任意闭区间的所有素数
Jun 10 Python
使用Python控制摄像头拍照并发邮件
Apr 23 Python
python+openCV利用摄像头实现人员活动检测
Jun 22 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
python 发送json数据操作实例分析
Oct 15 Python
Python3操作MongoDB增册改查等方法详解
Feb 10 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
python线程池如何使用
May 28 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
Jun 24 Python
Pycharm Git 设置方法
Sep 15 Python
Python Pandas读取Excel日期数据的异常处理方法
Feb 28 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 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桌面中心(二) 数据库写入
2007/03/11 PHP
php代码书写习惯优化小结
2013/06/20 PHP
PHP开发微信支付的代码分享
2014/05/25 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
js判断iframe内的网页是否滚动到底部触发事件
2014/03/18 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
jquery比较简洁的软键盘特效实现方法
2015/03/19 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
JS截取与分割字符串常用技巧总结
2015/11/10 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
原生js实现轮播图
2017/02/27 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
Python tkinter label 更新方法
2018/10/11 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
车间统计员岗位职责
2014/01/05 职场文书
餐饮营销方案
2014/02/23 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
护士个人自我鉴定
2014/03/24 职场文书
《金子》教学反思
2014/04/13 职场文书
婚纱店策划方案
2014/05/22 职场文书
银行求职自荐信
2014/06/30 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
Python中三种花式打印的示例详解
2022/03/19 Python
使用scrapy实现增量式爬取方式
2022/06/21 Python