個人的神殿

プログラミング

NumPy 色々な配列を作る②

続き

diagメソッドでは一次元のリストを引数に取り、その要素を対角成分とする対角行列を作成できる。
eyeと同様に対角成分を並べる位置を指定できる。

np.diag([1, 2, 3])

np.diag(np.linspace(1, 10, 3), k=1)
[[1 0 0]
 [0 2 0]
 [0 0 3]]

[[ 0.   1.   0.   0. ]
 [ 0.   0.   5.5  0. ]
 [ 0.   0.   0.  10. ]
 [ 0.   0.   0.   0. ]]

diagflatメソットでは二次元のリストからも対角行列を作れる。

np.diagflat([[1, 2], [3, 4]])

np.diagflat([[1, 2], [3, 4]], k=1)
[[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]

[[0 1 0 0 0]
 [0 0 2 0 0]
 [0 0 0 3 0]
 [0 0 0 0 4]
 [0 0 0 0 0]]

triメソッドで要素の値が1の下三角行列を作れる。
これも対角成分の位置を指定可能。

np.tri(3)

np.tri(2, 3, k=1)
[[1. 0. 0.]
 [1. 1. 0.]
 [1. 1. 1.]]

[[1. 1. 0.]
 [1. 1. 1.]]

既存の配列から下三角行列を作るには、trilメソッドを使用。
これも対角成分の位置を指定可能。

x = np.array([[1, 2], [3, 4]])

np.tril(x)

np.tril(x, k=-1)
[[1 0]
 [3 4]]

[[0 0]
 [3 0]]

上三角行列を作るにはtriuメソッドを使う。

x = np.array([[1, 2], [3, 4]])

np.triu(x)

np.triu(x, 1)
[[1 2]
 [0 4]]

[[0 2]
 [0 0]]

2変数関数をグラフ化するとき、二次元座標の配列を作りたい場合はmeshgridメソッドを使用する。

# x方向のベクトル
x = np.array([0, 1, 2])

# y方向のベクトル
y = np.array([0, 2, 4])

# meshgridメソッドはこれらのベクトルを引数に取り、二次元座標の行列を作成する。
x, y = np.meshgrid(x, y)
print(x)
print(y)

# z = x^2 + yの格子状の行列
print(x**2 + y)
[[0 1 2]
 [0 1 2]
 [0 1 2]]

[[0 0 0]
 [2 2 2]
 [4 4 4]]

[[0 1 4]
 [2 3 6]
 [4 5 8]]

tileメソッドで、指定した配列を指定回数並べた行列を作れる。
第1引数に元になる配列、第2引数には繰り返し回数を指定。

x = np.array([[1, 2], [3, 4]])

np.tile(x, 2)

np.tile(x, (2, 3))
[[1 2 1 2]
 [3 4 3 4]]

[[1 2 1 2 1 2]
 [3 4 3 4 3 4]
 [1 2 1 2 1 2]
 [3 4 3 4 3 4]]

配列を要素ごとに繰り返す配列を作るにはrepeatメソッドを使う。

x = np.array([[1, 2], [3, 4]])

# デフォルトでは各要素を指定回数繰り返した1次元配列が作られる。
np.repeat(x, 3)

# キーワード引数のaxisにより、何番目の軸方向に各要素を繰り返すかを指定する。
np.repeat(x, 2, axis=0)

# 繰り返し回数をリストにすることで行と列に対しての繰り返し回数も指定可能。
np.repeat(x, [2, 3], axis=1)
[1 1 1 2 2 2 3 3 3 4 4 4]

[[1 2]
 [1 2]
 [3 4]
 [3 4]]

[[1 1 2 2 2]
 [3 3 4 4 4]]