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实现dnspod自动更新dns解析的方法
Feb 14 Python
Python基础中所出现的异常报错总结
Nov 19 Python
利用Celery实现Django博客PV统计功能详解
May 08 Python
Python 错误和异常代码详解
Jan 29 Python
Python 统计字数的思路详解
May 08 Python
python将一组数分成每3个一组的实例
Nov 14 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
Apr 06 Python
5款Python程序员高频使用开发工具推荐
Apr 10 Python
Python编写打字训练小程序
Sep 26 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
Feb 27 Python
python中selenium库的基本使用详解
Jul 31 Python
Python中logging日志记录到文件及自动分割的操作代码
Aug 05 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+jQuery实现自动补全功能源码
2013/05/15 PHP
php函数与传递参数实例分析
2014/11/15 PHP
php基于session实现数据库交互的类实例
2015/08/03 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
node.js中的fs.createWriteStream方法使用说明
2014/12/17 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
jQuery检查元素存在性(推荐)
2016/09/17 Javascript
Ionic3 UI组件之autocomplete详解
2017/06/08 Javascript
微信小程序 页面滑动事件的实例详解
2017/10/12 Javascript
详解package.json版本号规则
2019/08/01 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
[04:13]2014DOTA2国际邀请赛 专访DC目前形势不容乐观
2014/07/12 DOTA
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
python中调试或排错的五种方法示例
2019/09/12 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
天猫国际进口超市直营:官方直采,一站购齐
2017/12/11 全球购物
简单介绍Object类的功能、常用方法
2013/10/02 面试题
如何在Shell脚本中使用函数
2015/09/06 面试题
面试后感谢信
2014/02/01 职场文书
房地产促销活动方案
2014/03/01 职场文书
演讲主持词
2014/03/18 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
领导班子党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
个人专业技术总结
2015/03/05 职场文书
大学感恩节活动总结
2015/05/05 职场文书
运动会广播稿20字
2015/08/19 职场文书
一文搞懂python异常处理、模块与包
2021/06/26 Python