Pythonで逆行列を求める方法【初心者向け】

初心者向けにPythonで逆行列を求める方法について解説しています。NumPyライブラリのlinalg.invメソッドを使用した逆行列の求め方を実際の例で見ながら学習していきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Pythonで逆行列を求める方法について解説します。

Pythonについてそもそもよく分からないという方は、Pythonとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのPythonオンライン講座の内容をもとにしています。

 

田島悠介

今回は、Pythonに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

逆行列を求める方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

逆行列とは

逆行列とは、行列の積の順番を変えても結果が一致する行列のことです。

例として、以下の行列があるとします。

この場合、AB=BAとなるため、BはAの逆行列となります。

なお、逆行列は以下のように表記します。

 

逆行列を求める方法

Python で逆行列を求めるには、 NumPy ライブラリの linalg.inv メソッドを使用します。まずは、NumPy をインストールしておきましょう。パソコンが Macならターミナル、Windowsならコマンドプロンプトから以下のコマンドでインストールします。なお、事前に Python のインストールが必要です。

pip install numpy

以下のように記述することで逆行列を取得できます。

逆行列 = np.linalg.inv(行列)

詳しくは公式サイトを参考にしてください。

https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.inv.html

 

[PR] Pythonで挫折しない学習方法を動画で公開中

実際に書いてみよう

今回のサンプルプログラムは、 linalg.inv  メソッドを使用して逆行列を取得します。プログラムは Python インタプリタで入力していきます。まずは基となる行列を定義しましょう。

a = [[1, 0], [0, 2]]

次に逆行列を求めます。

b = np.linalg.inv(a)
print(b)

実行結果は以下のようになります。

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

それでは、行列の積の順番を変えても結果が一致するか確認しましょう。 Python で行列の積を求めるには NumPy ライブラリの dot メソッドを使用します。はじめに積abを計算します。

np.dot(a, b)

実行結果は以下のようになります。

array([[1., 0.],
       [0., 1.]])

次に積baを計算します。

np.dot(b, a)

実行結果は以下のようになります。

array([[1., 0.],
       [0., 1.]])

行列の積 ab = ba となることが確認できました。なお、linalg.inv には複数の行列を渡すことが可能です。はじめに基となる行列を作成します。

d = np.random.randint(-10, 10, size=(4,2,2))
print(d)

実行結果は以下のようになります。乱数で作成しているため、結果は毎回異なります。

[[[  5   5]
  [  1  -6]]

 [[  8   3]
  [  1 -10]]

 [[ -4 -10]
  [ -3   9]]

 [[  2   2]
  [ -4  -1]]]

逆行列を求めてみましょう。

e = np.linalg.inv(d)
print(e)

実行結果は以下のようになります。

[[[ 0.17142857  0.14285714]
  [ 0.02857143 -0.14285714]]

 [[ 0.12048193  0.03614458]
  [ 0.01204819 -0.09638554]]

 [[-0.13636364 -0.15151515]
  [-0.04545455  0.06060606]]

 [[-0.16666667 -0.33333333]
  [ 0.66666667  0.33333333]]]

 

この記事を監修してくれた方

太田和樹(おおたかずき)
ITベンチャー企業のPM兼エンジニア

普段は主に、Web系アプリケーション開発のプロジェクトマネージャーとプログラミング講師を行っている。守備範囲はフロントエンド、モバイル、サーバサイド、データサイエンティストと幅広い。その幅広い知見を生かして、複数の領域を組み合わせた新しい提案をするのが得意。

開発実績:画像認識技術を活用した駐車場混雑状況把握(実証実験)、音声認識を活用したヘルプデスク支援システム、Pepperを遠隔操作するアプリの開発、大規模基幹系システムの開発・導入マネジメント

地方在住。仕事のほとんどをリモートオフィスで行う。通勤で消耗する代わりに趣味のDIYや家庭菜園、家族との時間を楽しんでいる。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

オンラインのプログラミングスクールTechAcademyではPythonを使って機械学習の基礎を学ぶPythonオンライン講座を開催しています。

初心者向けの書籍を使って人工知能(AI)や機械学習について学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。