【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の使い方を覚えて、是非とも効率的にプログラミングを行いましょう!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

フクロウ

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。