Python NumPy / ndarray のメソッド #10

株式会社リュディアです。今回も NumPy についてまとめていきます。

前回までの NumPy / ndarray のメソッドについてのまとめへのリンクは以下を参考にしてください。

以下のリンクの内容を元にまとめを作っていきます。

今回も Item selection and manipulation に分類されるメソッドをまとめていきます。今回は diagonal() です。diagonal() は2次元配列の対角成分を抜き出す処理を行います。では以下のコードを見てください。

import numpy as np

x = np.array([9, 10, 11, 4, 2, 3, 7, 6, 5], np.int32)
y = x.reshape(3, 3)

print(y)
print(y.diagonal())
print(y.diagonal(1))
print(y.diagonal(2))

#
# [[ 9 10 11]
#  [ 4  2  3]
#  [ 7  6  5]]
#
# [9 2 5]
#
# [10  3]
#
# [11]
#

要素数 9の1次元配列 x を定義し、3x3 の2次元配列に reshape したものを y としています。まず引数無しで diagonal() を適用すると行列の対角成分 [9 2 5] が抜き出されていることがわかりますね。

以下の図をみてください。先ほどは引数無しで diagonal() を適用したのでデフォルトの [9 2 5] が抜き出されました。diagonal() の引数に 1, 2 を指定した場合はずれた対角成分が抜き出されます。下の図と上の実行結果を見てください。diagonal() の引数が 1 と 2 の場合にどの対角成分が抜き出されているかわかりますね。。

画像1

では正方行列でない、つまり行数と列数が等しくない2次元行列の場合はどうなるでしょうか?以下の例を見てください。

import numpy as np

x = np.array([9, 10, 11, 12, 4, 2, 3, 1, 7, 6, 5, 8], np.int32)
y = x.reshape(3, 4)

print(y)
print(y.diagonal())
print(y.diagonal(1))
print(y.diagonal(2))
print(y.diagonal(3))

#
# [[ 9 10 11 12]
#  [ 4  2  3  1]
#  [ 7  6  5  8]]
#
# [9 2 5]
#
# [10  3  8]
#
# [11  1]
#
# [12]
#

3行4列の2次元配列に対して diagonal() を適用しています。それぞれ以下のように抜き出されていることがわかりますね。

画像2

今回は行列の対角成分を抜き出す diagonal() についてまとめました。

NumPy / ndarray のメソッドに関するまとめの続きは以下からどうぞ。

では、ごきげんよう。


この記事が気に入ったらサポートをしてみませんか?