[Python] NumPy – 2次元配列の対角線要素を取得する方法
NumPyでは、2次元配列の対角線要素を取得するためにnumpy.diag()関数
を使用します。
この関数は、引数に与えた配列の対角線上の要素を抽出します。
例えば、numpy.diag(array)
とすることで、array
の対角線要素が返されます。
また、k
引数を指定することで、主対角線から上下にずらした対角線の要素も取得可能です。
k=0
は主対角線、k>0
は上側、k<0
は下側の対角線を指します。
対角線要素の取得方法
numpy.diag()関数の基本
numpy.diag()関数
は、NumPyライブラリにおいて、配列の対角線要素を取得したり、対角行列を作成したりするための便利な関数です。
この関数は、2次元配列の主対角線要素を取得する際に特に役立ちます。
基本的な使い方は以下の通りです。
import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 主対角線要素の取得
diagonal_elements = np.diag(array_2d)
print(diagonal_elements)
[1 5 9]
主対角線の取得
主対角線とは、行列の左上から右下にかけての要素を指します。
numpy.diag()
を使用することで、簡単に主対角線の要素を取得できます。
上記の例では、配列の主対角線要素である1, 5, 9を取得しました。
上側・下側の対角線の取得 (k引数の使い方)
numpy.diag()関数
のk
引数を使用することで、上側または下側の対角線要素を取得することができます。
k
の値を正にすると上側の対角線、負にすると下側の対角線を指定します。
以下に例を示します。
import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 上側の対角線要素の取得
upper_diagonal = np.diag(array_2d, k=1)
print(upper_diagonal)
# 下側の対角線要素の取得
lower_diagonal = np.diag(array_2d, k=-1)
print(lower_diagonal)
[2 6]
[4 8]
1次元配列から対角行列を作成する方法
1次元配列を使用して対角行列を作成することも可能です。
numpy.diag()関数
に1次元配列を渡すと、その配列の要素を対角線に持つ2次元配列が生成されます。
以下にその例を示します。
import numpy as np
# 1次元配列の作成
array_1d = np.array([1, 2, 3])
# 対角行列の作成
diagonal_matrix = np.diag(array_1d)
print(diagonal_matrix)
[[1 0 0]
[0 2 0]
[0 0 3]]
このように、numpy.diag()関数
を使うことで、1次元配列から簡単に対角行列を作成することができます。
numpy.diag()の具体例
2次元配列から対角線要素を取得する例
numpy.diag()関数
を使用して、2次元配列から主対角線要素を取得する具体例を示します。
以下のコードでは、3×3の行列から主対角線の要素を取得しています。
import numpy as np
# 2次元配列の作成
array_2d = np.array([[10, 20, 30],
[40, 50, 60],
[70, 80, 90]])
# 主対角線要素の取得
diagonal_elements = np.diag(array_2d)
print(diagonal_elements)
[10 50 90]
この例では、行列の主対角線要素である10, 50, 90が取得されました。
k引数を使った対角線の取得例
k
引数を使用することで、上側または下側の対角線要素を取得することができます。
以下の例では、k=1
で上側の対角線、k=-1
で下側の対角線を取得しています。
import numpy as np
# 2次元配列の作成
array_2d = np.array([[10, 20, 30],
[40, 50, 60],
[70, 80, 90]])
# 上側の対角線要素の取得
upper_diagonal = np.diag(array_2d, k=1)
print("上側の対角線要素:", upper_diagonal)
# 下側の対角線要素の取得
lower_diagonal = np.diag(array_2d, k=-1)
print("下側の対角線要素:", lower_diagonal)
上側の対角線要素: [20 60]
下側の対角線要素: [40 80]
この例では、上側の対角線要素として20と60、下側の対角線要素として40と80が取得されました。
1次元配列から対角行列を作成する例
1次元配列を使用して対角行列を作成する方法を示します。
以下のコードでは、1次元配列の要素を対角線に持つ2次元配列を生成しています。
import numpy as np
# 1次元配列の作成
array_1d = np.array([5, 10, 15])
# 対角行列の作成
diagonal_matrix = np.diag(array_1d)
print(diagonal_matrix)
[[ 5 0 0]
[ 0 10 0]
[ 0 0 15]]
この例では、1次元配列の要素5, 10, 15が対角線に配置された3×3の対角行列が作成されました。
numpy.diag()関数
を使うことで、簡単に対角行列を生成することができます。
応用例:対角線要素の操作
対角線要素の合計を計算する方法
対角線要素の合計を計算するには、numpy.diag()関数
を使って主対角線要素を取得し、その合計をnumpy.sum()関数
で計算します。
以下の例では、2次元配列の主対角線要素の合計を求めています。
import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 主対角線要素の取得
diagonal_elements = np.diag(array_2d)
# 対角線要素の合計を計算
diagonal_sum = np.sum(diagonal_elements)
print("対角線要素の合計:", diagonal_sum)
対角線要素の合計: 15
この例では、主対角線要素1, 5, 9の合計が15であることが確認できます。
対角線要素を変更する方法
対角線要素を変更するには、numpy.fill_diagonal()関数
を使用します。
この関数を使うことで、指定した値で対角線要素を簡単に更新できます。
以下の例では、対角線要素をすべて10に変更しています。
import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 対角線要素を10に変更
np.fill_diagonal(array_2d, 10)
print("変更後の配列:\n", array_2d)
変更後の配列:
[[10 2 3]
[ 4 10 6]
[ 7 8 10]]
この例では、元の配列の対角線要素がすべて10に変更されました。
対角線要素をゼロにする方法
対角線要素をゼロにするには、numpy.fill_diagonal()関数
を使ってゼロを指定します。
以下の例では、対角線要素をゼロに設定しています。
import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 対角線要素をゼロに変更
np.fill_diagonal(array_2d, 0)
print("対角線要素をゼロにした配列:\n", array_2d)
対角線要素をゼロにした配列:
[[0 2 3]
[4 0 6]
[7 8 0]]
この例では、対角線要素がすべてゼロに変更されました。
対角行列を作成する方法
1次元配列を使用して対角行列を作成する方法は、numpy.diag()関数
を使うことで簡単に実現できます。
以下の例では、1次元配列から対角行列を生成しています。
import numpy as np
# 1次元配列の作成
array_1d = np.array([1, 2, 3, 4])
# 対角行列の作成
diagonal_matrix = np.diag(array_1d)
print("対角行列:\n", diagonal_matrix)
対角行列:
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
この例では、1次元配列の要素が対角線に配置された4×4の対角行列が作成されました。
numpy.diag()関数
を使用することで、簡単に対角行列を生成することができます。
他の方法で対角線要素を取得する
numpy.trace()を使った対角線要素の合計取得
numpy.trace()関数
を使用すると、2次元配列の主対角線要素の合計を簡単に取得できます。
この関数は、行列の主対角線の合計を直接計算するため、非常に便利です。
以下の例では、2次元配列の主対角線要素の合計を求めています。
import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 主対角線要素の合計を取得
diagonal_sum = np.trace(array_2d)
print("対角線要素の合計:", diagonal_sum)
対角線要素の合計: 15
この例では、numpy.trace()
を使って主対角線要素の合計が15であることが確認できました。
ループを使って対角線要素を手動で取得する方法
ループを使用して対角線要素を手動で取得することも可能です。
以下の例では、2次元配列のサイズを取得し、forループを使って主対角線の要素を手動で取得しています。
import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 主対角線要素を手動で取得
diagonal_elements = []
rows, cols = array_2d.shape
for i in range(min(rows, cols)):
diagonal_elements.append(array_2d[i, i])
print("主対角線要素:", diagonal_elements)
主対角線要素: [np.int64(1), np.int64(5), np.int64(9)]
この例では、手動で主対角線要素を取得し、リストに格納しています。
numpy.fill_diagonal()を使った対角線要素の変更
numpy.fill_diagonal()関数
を使用すると、対角線要素を簡単に変更することができます。
この関数は、指定した値で対角線要素を更新します。
以下の例では、対角線要素をすべて100に変更しています。
import numpy as np
# 2次元配列の作成
array_2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 対角線要素を100に変更
np.fill_diagonal(array_2d, 100)
print("変更後の配列:\n", array_2d)
変更後の配列:
[[100 2 3]
[ 4 100 6]
[ 7 8 100]]
この例では、元の配列の対角線要素がすべて100に変更されました。
numpy.fill_diagonal()
を使うことで、対角線要素の変更が簡単に行えます。
まとめ
この記事では、NumPyライブラリを使用して2次元配列の対角線要素を取得する方法や、対角線要素の操作に関するさまざまなテクニックについて詳しく解説しました。
特に、numpy.diag()関数
を使った主対角線の取得や、k
引数を利用した上側・下側の対角線要素の取得方法、さらには1次元配列から対角行列を作成する方法についても触れました。
これらの知識を活用することで、データ処理や数値計算の効率を向上させることができるでしょう。
今後は、実際のプロジェクトやデータ分析の場面で、これらのテクニックを積極的に試してみてください。