【NumPy入門 np.matrix】行列を扱うnp.matrixクラスの特性を知ろう!

こんにちは、インストラクターのフクロウです!

この記事では行列を扱うクラスnp.matrixについて紹介します!

NumPyではnp.ndarrayクラスで配列を管理していました。

これに対して、np.ndarrayの二次元配列に当たる構造には特別にnp.matrixクラスが用意されています。

np.matrixはほとんどnp.ndarrayの二次元配列限定版といっても良いのですが、実は少し違う機能を持っています。

この記事でnp.matrixについて詳しく解説するので、是非読んでくださいね!

X3*X3.transpose()

[エラーメッセージ]

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-32-0720f2ef1dc3> in <module>()
----> 1 X3*X3.transpose()

ValueError: operands could not be broadcast together with shapes (2,3) (3,2) 

アダマール積(要素ごとの積)

配列の要素ごとの積を計算するには、np.arrayでは*演算子で可能ですが、np.matrixではできません

np.matrixではnp.multiply関数を使います。(np.araryでもnp.multiplyは使えますよ)

np.matrixのアダマール積

np.matrix同士を*演算子で計算しようとするとエラーがでます。

X*X

[エラーメッセージ]

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-34-0794a8b26aec> in <module>()
----> 1 X*X

~/anaconda3/lib/python3.7/site-packages/numpy/matrixlib/defmatrix.py in __mul__(self, other)
    213         if isinstance(other, (N.ndarray, list, tuple)) :
    214             # This promotes 1-D vectors to row vectors
--> 215             return N.dot(self, asmatrix(other))
    216         if isscalar(other) or not hasattr(other, '__rmul__') :
    217             return N.dot(self, other)

ValueError: shapes (2,3) and (2,3) not aligned: 3 (dim 1) != 2 (dim 0)

アダマール積を計算するならnp.ndarray.multiply関数を使えばOKです。

np.multiply(X,X)

# 計算結果
matrix([[ 1,  4,  9],
        [16, 25, 36]])

np.arrayのアダマール積

np.ndarray同士ならば*演算子でもアダマール積が計算できます。

X3*X3

# 計算結果
array([[ 1,  4,  9],
       [16, 25, 36]])

また、np.ndarray.multiply関数ならば、np.ndarrayでもnp.matrixでも同様にアダマール積が計算できます。

np.multiply(X3,X3)

# 計算結果
array([[ 1,  4,  9],
       [16, 25, 36]])

まとめ

この記事では、NumPyで行列を扱うクラスnp.matrixの紹介と、np.ndarrayとの動作の違いについて解説しました。

np.matrixを使えば明示的に行列を扱うことができます。

行列計算はどんな機械学習モデルの実装でもよく使われるものです。

np.matrixの使い方を覚えて、是非とも効率的にプログラミングを行いましょう!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次