python - 对角线遍历矩阵
问题描述
我有一块NxM电池板。我想从上到下沿对角线遍历它。另一个条件是我只想打印至少有 4 个单元格的对角线。我用一段时间和 3 个条件实现了它,但我正在寻找一种更简单的方法。
董事会是如何定义的
board = []
for t in range(BOARDWIDTH):
board.append([EMPTY] * BOARDHEIGHT)
想象一下它包含以下内容......
0 1 2 3 4 5 6
0 aa ab ac ad ae af ag
1 ah ai aj ak al am an
2 ao ap aq ar as at au
3 av aw ax ay az ba bb
4 bc bd be bf bg bh bi
5 bj bk bl bm bn bo bp
应该如何遍历
ao aw be bm
ah ap ax bf bn
aa ai aq ay bg bo
...
ad al at bb
解决方案
首先,将您的列表转换为 numpy 数组:
array = np.array(board)
然后,只需使用np.diagonal
:
min_offset, max_offset = array.shape[0] - 4, array.shape[1] - 4
# To only select the sub-diagonals with more than 4 elements
for k in range(-min_offset, max_offset+1):
print(array.diagonal(k))
例子 :
array = np.arange(35).reshape(5,7)
# array = [[ 0 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 26 27]
# [28 29 30 31 32 33 34]]
输出:
[ 7 15 23 31]
[ 0 8 16 24 32]
[ 1 9 17 25 33]
[ 2 10 18 26 34]
[ 3 11 19 27]
如果您希望使用相同的标准打印横向对角线,只需翻转数组的列并像以前一样执行:
array = array[:, ::-1]
,np.arange(35).reshape(5,7)
这输出:
[13 19 25 31]
[ 6 12 18 24 30]
[ 5 11 17 23 29]
[ 4 10 16 22 28]
[ 3 9 15 21]
推荐阅读
- r - 如何将 x 轴调整为从 2000 年开始并在 R 中每年计数 1?
- matplotlib - 通过以正确格式获取 Google Vision API 数据,使用 matplotlib 一次显示多个多边形
- next.js - Next.js 缓存对 `getStaticPaths` 和 `getStaticProps` 中使用的数据库的请求以缩短构建时间
- git - 如何在给定 git 中的旧路径的情况下找到文件的当前位置
- qt - QML/Qt 渐变图
- php - 已选择字段的联系表格 7 简码
- java - Spring Boot 2 应用程序在 docker-maven-plugin 触发的 docker 容器内运行时无法连接到 mysql
- git - 在 makefile 中运行任何 git 命令的权限错误
- javascript - 提供静态内容和设置 cookie
- sql - 如何使用每个客户的最新状态更新提取数据