Numpyのmat関数について

AI

Numpyには行列オブジェクトを作成するためのmat()が用意されています。
一般的にNumpyの大多数の操作がndarray型を返しているためmat()関数は特別な理由が無い限り使用しない方が良いでしょう。
けれども、知っておいて損は無いかもしれません。

次の例は、ndarray型の行列とmatrix型の行列を作成しています。
出来上がりの行列は変わりませんが、型が違っています。
そのため、挙動が変わってきます。

# Numpy行列を作成
matrix = np.array([[1, 2],
                   [1, 2],
                   [1, 2]])
print('ndarray',matrix,type(matrix))

# 行列データ構造の作成
matrix_object = np.mat([[1, 2],
                        [1, 2],
                        [1, 2]])
print('matrix',matrix_object,type(matrix_object))

結果
ndarray [[1 2]
[1 2]
[1 2]] class ‘numpy.ndarray’
matrix [[1 2]
[1 2]
[1 2]] class ‘numpy.matrix’

次の例は、要素が3だけの5行5列の行列を作成しています。そしてその行列を2乗する計算をしたものです。

ans = np.ones((5,5), dtype=np.int64) * 3
print(ans.dot(ans))

結果
[[45 45 45 45 45]
[45 45 45 45 45]
[45 45 45 45 45]
[45 45 45 45 45]
[45 45 45 45 45]]

これを行列型で作成すると次のようになります。
累乗計算が楽になります。

# 行列データ構造にして計算
ans = np.ones((5,5), dtype=np.int64) * 3
ans = np.mat(ans)
print(ans**2)

10乗したい場合などに使えるかもです。

ndarray型にするには次のようにします。

ans = np.squeeze(np.asarray(ans))
type(ans)

結果
numpy.ndarray

最近ではもっと便利な方法もあります。
dot()関数の代わりに、@を使うことができます。

ans3 = np.ones((5,5), dtype=np.int64) * 3
print(ans3 @ ans3)

[[45 45 45 45 45]
[45 45 45 45 45]
[45 45 45 45 45]
[45 45 45 45 45]
[45 45 45 45 45]]

タイトルとURLをコピーしました