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中的__builtins__内建对象
Jun 21 Python
Python实现的下载网页源码功能示例
Jun 13 Python
python爬虫之urllib3的使用示例
Jul 09 Python
python3 flask实现文件上传功能
Mar 20 Python
Pandas 按索引合并数据集的方法
Nov 15 Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 Python
python解释器spython使用及原理解析
Aug 24 Python
使用django和vue进行数据交互的方法步骤
Nov 11 Python
用python中的matplotlib绘制方程图像代码
Nov 21 Python
解决numpy矩阵相减出现的负值自动转正值的问题
Jun 03 Python
Python3 用matplotlib绘制sigmoid函数的案例
Dec 11 Python
Python pandas读取CSV文件的注意事项(适合新手)
Jun 20 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
怎么在Windows系统中搭建php环境
2013/08/31 PHP
php 获取SWF动画截图示例代码
2014/02/10 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
Yii框架表单模型和验证用法
2016/05/20 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
网页右下角弹出窗体实现代码
2014/06/05 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
Js 获取、判断浏览器版本信息的简单方法
2016/08/08 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
详解vue-router基本使用
2017/04/18 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
浅谈如何使用 webpack 优化资源
2017/10/20 Javascript
Vue Echarts实现可视化世界地图代码实例
2019/05/07 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
Python 稀疏矩阵-sparse 存储和转换
2017/05/27 Python
python不换行之end=与逗号的意思及用途
2017/11/21 Python
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
python切片的步进、添加、连接简单操作示例
2019/07/11 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
酒店个人求职信范文
2014/01/25 职场文书
初中三年毕业生的自我评价分享
2014/02/14 职场文书
大学生实训报告总结
2014/11/05 职场文书
玄武湖导游词
2015/02/05 职场文书
电子商务专业求职信范文
2015/03/19 职场文书
暂停营业通知
2015/04/25 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript
goland 清除所有的默认设置操作
2021/04/28 Golang
Go语言应该什么情况使用指针
2021/07/25 Golang