簡體   English   中英

對角線遍歷矩陣

[英]Traverse matrix diagonally

我有一塊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]

使用 numpy.diag,例如用於索引集I

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

此外,如果 |i| <= max(M,N) - 4 那么對角線有 4 個條目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM