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编程-将Python程序转化为可执行程序[整理]
Apr 09 Python
pyramid配置session的方法教程
Nov 27 Python
python基础教程之循环介绍
Aug 29 Python
wxPython事件驱动实例详解
Sep 28 Python
python检测远程端口是否打开的方法
Mar 14 Python
高效测试用例组织算法pairwise之Python实现方法
Jul 19 Python
Python程序员面试题 你必须提前准备!(答案及解析)
Jan 23 Python
Python异常处理操作实例详解
May 10 Python
python实现石头剪刀布小游戏
Jan 20 Python
浅析Python 多行匹配模式
Jul 24 Python
Python爬虫之Spider类用法简单介绍
Aug 04 Python
Python实现快速大文件比较代码解析
Sep 04 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
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
PHPAnalysis中文分词类详解
2014/06/13 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
symfony表单与页面实现技巧
2015/01/26 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
php array_pop 删除数组最后一个元素实例
2016/11/02 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
PHP优化之批量操作MySQL实例分析
2020/04/23 PHP
JavaScript 函数调用规则
2009/09/14 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
js阻止冒泡和默认事件(默认行为)详解
2016/10/20 Javascript
JavaScript编写九九乘法表(两种任选)
2017/02/04 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
2017/04/25 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
Python记录详细调用堆栈日志的方法
2015/05/05 Python
各个系统下的Python解释器相关安装方法
2015/10/12 Python
python数据处理实战(必看篇)
2017/06/11 Python
python 如何在测试中使用 Mock
2021/03/01 Python
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
外企办公室竞聘演讲稿
2013/12/29 职场文书
工程安全员岗位职责
2014/03/09 职场文书
安全责任协议书
2014/04/21 职场文书
标准版离职证明书
2014/09/12 职场文书
学生上课说话检讨书
2014/10/25 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
消防安全主题班会
2015/08/12 职场文书