Pynote

Python、機械学習、画像処理について

numpy - 上三角行列、下三角行列、対角行列の作成、対角成分の取得 (diag, tri, triu, tirl, etc)

概要

numpy の指定した行列から上三角行列、下三角行列、対角行列を作成する及び対角成分を取得する関数を整理する。

numpy.diag

指定した配列の対角成分から1次元配列を作成する。

関数

numpy.diag(v, k=0)

a = np.arange(1, 10).reshape(3, 3)
print(a)
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]

b = np.diag(a)
print(b)  # [1 5 9]

b = np.diag(a, k=1)
print(b)  # [2 6]

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

numpy.diagflat

指定した配列を対角成分の値とした行列を作成する。

関数

numpy.diagflat(v, k=0)

a = np.array([1, 5, 9])
print(a)  # [1 5 9]

b = np.diagflat(a)
print(b)
# [[1 0 0]
#  [0 5 0]
#  [0 0 9]]

b = np.diagflat(a, k=1)
print(b)
# [[0 1 0 0]
#  [0 0 5 0]
#  [0 0 0 9]
#  [0 0 0 0]]

b = np.diag(a, k=-1)
print(b)
# [[0 0 0 0]
#  [1 0 0 0]
#  [0 5 0 0]
#  [0 0 9 0]]

numpy.tri

下三角成分が1、上三角成分が0の行列を作成する。

関数

numpy.tri(N, M=None, k=0, dtype=<class 'float'>)

a = np.tri(3, dtype=int)
print(a)
# [[1 0 0]
#  [1 1 0]
#  [1 1 1]]

a = np.tri(3, 4, dtype=int)
print(a)
# [[1 0 0 0]
#  [1 1 0 0]
#  [1 1 1 0]]

a = np.tri(3, k=1, dtype=int)
print(a)
# [[1 1 0]
#  [1 1 1]
#  [1 1 1]]

a = np.tri(3, k=-1, dtype=int)
print(a)
# [[0 0 0]
#  [1 0 0]
#  [1 1 0]]

numpy.tril

指定した行列の上三角成分を0とした行列を作成する。

関数

numpy.tril(m, k=0)

a = np.arange(1, 10).reshape(3, 3)
print(a)
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]

b = np.tril(a)
print(b)
# [[1 0 0]
#  [4 5 0]
#  [7 8 9]]

b = np.tril(a, k=1)
print(b)
# [[1 2 0]
#  [4 5 6]
#  [7 8 9]]

b = np.tril(a, k=-1)
print(b)
# [[0 0 0]
#  [4 0 0]
#  [7 8 0]]

numpy.triu

指定した行列の下三角成分を0とした行列を作成する。

関数

numpy.triu(m, k=0)

a = np.arange(1, 10).reshape(3, 3)
print(a)
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]

b = np.triu(a)
print(b)
# [[1 2 3]
#  [0 5 6]
#  [0 0 9]]

b = np.triu(a, k=1)
print(b)
# [[0 2 3]
#  [0 0 6]
#  [0 0 0]]

b = np.triu(a, k=-1)
print(b)
# [[1 2 3]
#  [4 5 6]
#  [0 8 9]]