プログラミングコンテストでは二次元配列を探索する問題がよく出題され、
その際に対角成分を探索(斜め方向の探索)したい場合があります。

そこで、ここでは python3 で簡単に二次元配列の対角成分を抽出する方法を紹介します。

早速ですが、以下のコードで二次元配列の対角成分を簡単に抽出しています。

import numpy as np

#探索したい二次元配列
array = [[1,2,3], 
         [4,5,6], 
         [7,8,9]]

#numpy array に変換
Array = np.array(array)

#それぞれの位置から対角成分を抽出
d = np.diag(Array,k=0)
print(d)  # [1 5 9]

d = np.diag(Array, k=1)
print(d)  # [2 6]

d = np.diag(Array, k=2)
print(d)  # [3]

d = np.diag(Array,k=-1)
print(d)  # [4 8]

d = np.diag(Array, k=-2)
print(d)  # [7]

最大のポイントは numpy をインポートしているところです。

numpy を使用すれば、例えば、

d = np.diag(Array,k=0)
print(d)  # [1 5 9]

という表記で、Array という配列 の Array[0][0] から Array[2][2] に至るまでの対角成分が抽出できています。

始点であるArray[0][0] を決めるのが k という引数で、k = 0 でそのようになります。

その k の値を0から増やしていけば、始点が以下のように変化していきます。

k = 1:始点 Array[0][1]
k = 2:始点 Array[0][2]

また、逆に、kの値を0から減らしていけば、始点が以下のように変化していきます。

k = -1:始点 Array[1][0]
k = -2:始点 Array[2][0]


以上が、 python3 で簡単に二次元配列の対角成分を抽出する方法でした。

お役に立てれば嬉しいです。


一応、forループ で連続して対角成分を表示させるコードを載せておきます。

import numpy as np

#行数および列数
N = 3

#探索したい二次元配列
array = [[1,2,3], 
         [4,5,6], 
         [7,8,9]]

#numpy array に変換
Array = np.array(array)

for n in range(N*-1+1,N):
    d = np.diag(Array,k=n) #始点を 変数n で指定
    print(d)

 ・