Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

IT技術 (Technology)

Pythonで行列の計算方法をご紹介(Numpyを使用した四則演算や内積計算)

投稿日:2022年8月30日 更新日:

 

<目次>

(1) Pythonで行列の計算方法をご紹介(Numpyを使用した四則演算や内積計算)
 (1-1) 概要
 (1-2) STEP1:Numpyのインストール
 (1-3) STEP2:行列の定義
 (1-4) STEP3:行列の演算
 (1-5) 補足:ベクトルの場合
 (1-6) 内積とは?

(1) Pythonで行列の計算方法をご紹介(Numpyを使用した四則演算や内積計算)

(1-1) 概要

Pythonで「行列」を表現しよと思ったら、リストと呼ばれるデータ型を使います。
例えば、次のような I = [[1,0],[1,0]]、A = [[1,2],[3,4]]はそれぞれ2行×2列の行列とみなす事ができます。更に言うとIは「単位行列」になっています(対角成分=1&それ以外=0)。
 
<入力>行列
I = [[1,0],[0,1]]
A = [[1,2],[3,4]]
この時、IとAの和を計算しようとI+Aとすると、普通にやるとリストが連結された結果(NG)が返ってきてしまいます。
 
<出力>行列の足し算(NG例)
[[1, 0], [0, 1], [1, 2], [3, 4]]
(図100)

これを防ぎ、正しく行列の計算を行う方法はいくつかありますが、今回はNumpyを用いた方法をご紹介します。Numpyライブラリは数値計算や科学技術計算で非常に良く使われているライブラリで、線形代数の演算なども効率良く行う事ができるのでオススメです。

(表)
No 評価 概要
方法① forループで各要素を足し合わせていく
方法② 行列の和を計算する関数(例:add_matrix())を予め準備して、add_matrix(I,A)のように利用する
方法③ Numpyライブラリを使用する

(1-2) STEP1:Numpyのインストール

(コマンド)
> pip install numpy
 
(結果例)
Collecting numpy
  Downloading numpy-1.22.3-cp38-cp38-win_amd64.whl (14.7 MB)
     |████████████████████████████████| 14.7 MB 1.7 MB/s
Installing collected packages: numpy
Successfully installed numpy-1.22.3
 
(図111)

(1-3) STEP2:行列の定義

行列を定義するためには「np.array([[N,N],[N,N]])」のように定義します(Nは要素)。
I = np.array([[1,0],[0,1]])
A = np.array([[1,2],[3,4]])
 
(図121)

(1-4) STEP3:行列の演算

あとは、通常の変数の演算と同じような形で四則演算や、行列の演算(内積など)を計算できます。

・①「+」:足し算

(例)

I = np.array([[1,0],[0,1]])
A = np.array([[1,2],[3,4]])
print(I+A)
(結果)

[[2 2]
 [3 5]]
 
(図131)

・②「-」:引き算

(例)
I = np.array([[1,0],[0,1]])
A = np.array([[1,2],[3,4]])
print(A-I)
(結果)

[[0 2]
 [3 3]]
(図132)

・③「*」:各要素同士の掛け算

⇒あまり使う場面はない??
(例)
I = np.array([[1,0],[0,1]])
A = np.array([[1,2],[3,4]])
print(I*A)
(結果)

[[1 0]
 [0 4]]
(図133)

・④「/」:各要素同士の割り算

⇒あまり使う場面はない??
 
(例)
I = np.array([[1,0],[0,1]])
A = np.array([[1,2],[3,4]])
print(I/A)
(結果)
[[1.   0.  ]
 [0.   0.25]]
(図134)
 
・⑤「numpy.dot(X,Y)」:ベクトルの「内積」 ≒ 行列の「積」
 
行列の「積」は、次のように計算されます
(行、列の組み合せ毎にベクトルの内積計算を行う)
 
(図136①)

今回の例で計算
(図136②)

(例)

I = np.array([[1,0],[0,1]])
A = np.array([[1,2],[3,4]])
print(np.dot(I,A))
 
(結果)
[[1 2]
 [3 4]]
(図135)
 

(1-5) 補足:ベクトルの場合

「ベクトル」を表現しよと思ったら、リストで1行×N列のデータを使います。
 
(例)
a = np.array([0,1,0])
b = np.array([1,2,3])
ベクトルも行列と同様の方法で、四則演算や内積を取る事ができます。
 
(図141)

(1-6) 内積とは?

内積の本質は「ベクトルの積」である。
ベクトルの積を考える際にネックとなるのが「方向がある」点です。
内積の発想は「方向を揃える」ことで掛け算を可能にするというもの。
そのためにcosθを掛ける事で、向きを揃えて掛け算可能にしている。
(図151)
(図152)

Adsense審査用広告コード


Adsense審査用広告コード


-IT技術 (Technology)

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

SSLCertVerificationError [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificateエラーが出る原因と対処

  <目次> (1) SSLCertVerificationError [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: …

Slackで入力フォームを作る方法についてご紹介

  <目次> (1) Slackで入力フォームを作る方法についてご紹介  (1-1) STEP0:前提条件  (1-2) STEP0:前提条件  (1-3) STEP1:Slackでボット用 …

no image

Slackでボットを開発する手順をご紹介(Python)

  <目次> (1) Slackでボットを開発する手順をご紹介(Python)  (1-0) やりたいこと  (1-1) STEP1:Slackアプリの作成と疎通  (1-2) STEP2: …

エクスプローラーの検索が遅い際の対処方法

  <目次> (1) エクスプローラーの検索が遅い際の対処方法  (1-1) Everythingとは?  (1-2) Everythingの導入手順 (1) エクスプローラーの検索が遅い際 …

Slackでスタンプが押されたら転送する方法(指定のチャンネルへの転送)

  <目次> (1) Slackでスタンプが押されたら転送する方法(指定のチャンネルへの転送)  (1-1) 「リアク字チャンネラー」の概要  (1-2) 「リアク字チャンネラー」の設定手順 …

  • English (United States)
  • 日本語
Top