Python 对角遍历矩阵

Python 对角遍历矩阵,python,algorithm,matrix,Python,Algorithm,Matrix,我有一个由NxM单元组成的板。我想沿着对角线从上到下穿过它。另一个条件是,我只想打印至少有4个单元格的对角线。我通过一个while和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

我有一个由NxM单元组成的板。我想沿着对角线从上到下穿过它。另一个条件是,我只想打印至少有4个单元格的对角线。我通过一个while和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.diag,例如索引集
I

for i in I:
    numpy.diag(M, i)

另外,如果先将| i |转换为numpy数组:

array = np.array(board)
然后,简单地使用:


例如:

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).重塑(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]

你的矩阵是什么?一个numpy数组?对不起,我没提到。我更新了帖子。我需要处理对角线的每个元素,为对角线赋予权重。然后我需要迭代数组。对角线(K)对吗?@LauraGalera Yes如果想要用完全相同的条件遍历/这个对角线,应该更改什么?我没有使用numpy,而是使用2 for和1 conditional。您的意思是要遍历输出数组吗?在这种情况下,只需通过执行
array=array[:,:-1]
翻转数组的列,然后将相同的方法应用于
array
[13 19 25 31]
[ 6 12 18 24 30]
[ 5 11 17 23 29]
[ 4 10 16 22 28]
[ 3  9 15 21]