Pythonで行列を扱う方法|numpyの使い方を実例付きで徹底解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2023年12月)

✔当記事は次のような方向けに書かれています

「Pythonを使った行列の扱い方がわからない」

「Pythonで行列の操作・計算方法を学びたい」

「Pythonで行列を使用したコードのサンプルが見たい」

✔当記事で得られる知識

  • Pythonを利用した行列の基礎知識
  • Pythonで行列を上手に扱うための操作や計算方法
  • Pythonで行列を用いた具体的なコードサンプル

当記事では、Pythonを用いて行列を操作する基本的な方法から、より複雑な計算法まで、具体的なコードサンプルを交えて分かりやすく解説します。

役立つ情報が詰まっているので、ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Pythonと行列: 初歩から始める

こちらでは、「Pythonと行列」についてお伝えしていきます。

Pythonで行列計算を効率的に行うための手引きとなる内容です。

  • Pythonと行列の関係
  • Pythonで行列計算を始めるまでの設定

Pythonと行列の関係

Pythonは数値計算を行う上で非常に優れたプログラミング言語です。

行列は数学や物理、データサイエンスなど幅広い分野で用いられます。

Pythonで行列計算をすることで、複雑な計算を効率的におこなえます。

Pythonで行列計算を始めるまでの設定

Pythonで行列計算をおこなうには、numpyというライブラリを使用します。

numpyは高性能な数値計算を行うためのライブラリで、行列計算においても非常に強力。

numpyをインストールするには、以下のコマンドを実行します。

pip install numpy

これで、Pythonで行列計算を始める準備が整いました。

行列オブジェクトの生成: Pythonリストとnumpy

こちらでは、「行列オブジェクトの生成」についてお伝えしていきます。

Pythonのリストとnumpyを使用して行列をどのように生成するのかを学びましょう。

  • Pythonリストでの行列表現
  • numpyでの行列作成法: array()とmatrix()

Pythonリストでの行列表現

Pythonのリストを使って行列を表現できます。

以下は、リストの中にリストを入れる形で、2次元のデータ構造を作る例です。

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matrix)

numpyでの行列作成法: array()とmatrix()

numpyを使用すると、より効率的に行列を扱えます。

array()関数やmatrix()関数で、行列の作成が可能だからです。

import numpy as np

# Using array()
matrix_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# Using matrix()
matrix_mat = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(matrix_array)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

print(matrix_mat)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

行列の取得と代入: 要素操作の基礎

こちらでは、行列の「要素の取得と代入」について見ていきましょう。

要素にアクセスしたり、値を変更する基本的な方法を学びます。

  • 行列の要素の取得方法
  • 行列の要素の変更・代入

行列の要素の取得方法

行列の要素にアクセスするには、インデックスを使用します。

<np.array>[行のインデックス, 列のインデックス]

numpyの場合、行と列のインデックスを指定して要素を取得できます。

import numpy as np

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# Get element from second row, third column
element = matrix[1, 2]
print(element)  # Output: 6

行列の要素の変更・代入

要素の値を変更する場合も、インデックスを使用します。

指定したインデックスの位置に新しい値を代入しましょう。

import numpy as np

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# Change element at second row, third column to 10
matrix[1, 2] = 10
print(matrix)

行列操作: 演算子とメソッド

こちらでは、「行列操作」についてご覧いただきます。

行列の基本的な操作と、それらをおこなうための演算子やメソッドについてです。

  • 行列の転置: T属性
  • 行列の和と差: +演算子、-演算子
  • 行列のスカラー倍と要素ごとの積
  • 行列の掛け算: dot(), matmul(), @演算子
  • 行列のべき乗: **演算子v

行列の転置: T属性

行列の転置は、行と列を入れ替える操作です。

numpyでは、行列オブジェクトのT属性を使用して簡単に転置を取得できます。

import numpy as np

matrix = np.array([[1, 2, 3], [4, 5, 6]])

# Transpose the matrix
transpose = matrix.T
print(transpose)

行列の和と差: +演算子、-演算子

行列の和と差は、同じ形状の行列同士でおこないます。

numpyでは、+演算子と-演算子を使用してこれらの計算が可能です。

import numpy as np

matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])

# Sum of the matrices
sum_matrix = matrix1 + matrix2
print(sum_matrix)

# Difference of the matrices
diff_matrix = matrix1 - matrix2
print(diff_matrix)

行列のスカラー倍と要素ごとの積

行列のスカラー倍は、行列の各要素を特定の数で掛けます

要素ごとの積では、対応する要素同士を掛け合わせましょう。

import numpy as np

matrix = np.array([[1, 2], [3, 4]])
scalar = 3

# Scalar multiplication
scaled_matrix = matrix * scalar
print(scaled_matrix)

# Element-wise multiplication
element_wise_product = matrix * matrix
print(element_wise_product)

行列の掛け算: dot(), matmul(), @演算子

行列の積は、dot()メソッド、matmul()関数、または @演算子を使用して計算できます。

import numpy as np

matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])

# Matrix multiplication using dot()
product_dot = matrix1.dot(matrix2)
print(product_dot)

# Matrix multiplication using matmul()
product_matmul = np.matmul(matrix1, matrix2)
print(product_matmul)

# Matrix multiplication using @ operator
product_at = matrix1 @ matrix2
print(product_at)

行列のべき乗: 演算子

行列のべき乗は、行列を特定の整数回掛け合わせる操作です。

これはnumpyの演算子を使用して計算します。

import numpy as np

matrix = np.array([[1, 2], [3, 4]])

# Matrix to the power of 2
matrix_power = matrix ** 2
print(matrix_power)

ベクトルや固有値など、特殊な行列操作について見ていきます。

特殊な行列操作: ベクトルから固有値まで

こちらでは、行列操作の中でも特に「特殊な行列操作」についてお伝えしていきます。

ベクトルの内積、逆行列、行列式、固有値と固有ベクトルの計算方法を学びましょう。

  • ベクトルの内積の求め方: numpy.inner()
  • 逆行列と擬似逆行列の求め方
  • 行列式の計算方法: numpy.linalg.det()
  • 固有値と固有ベクトルを求める方法: numpy.linalg.eig()

ベクトルの内積の求め方: numpy.inner()

ベクトルの内積は、ベクトルの要素同士の積の和として計算されます。

numpyのinner()関数を使用して計算可能です。

import numpy as np

vector1 = np.array([1, 2, 3])
vector2 = np.array([4, 5, 6])

# Inner product of vectors
inner_product = np.inner(vector1, vector2)
print(inner_product)

逆行列と擬似逆行列の求め方

逆行列は、行列に対して元の行列と掛け合わせると単位行列になる行列です。

numpyのlinalg.inv()関数を使用して逆行列を求められます。

また、pinv()関数を使用して擬似逆行列を求めることも可能。

import numpy as np

matrix = np.array([[1, 2], [3, 4]])

# Inverse of a matrix
inverse = np.linalg.inv(matrix)
print(inverse)

# Pseudo-inverse of a matrix
pseudo_inverse = np.linalg.pinv(matrix)
print(pseudo_inverse)

行列式の計算方法: numpy.linalg.det()

行列式は、行列の特性を表すひとつの数値です。

numpyのlinalg.det()関数を使用して行列式を計算します。

import numpy as np

matrix = np.array([[1, 2], [3, 4]])

# Determinant of a matrix
determinant = np.linalg.det(matrix)
print(determinant)

固有値と固有ベクトルを求める方法: numpy.linalg.eig()

固有値と固有ベクトルは、行列の特性を調査する際に重要な役割を果たします

これらは、numpyのlinalg.eig()関数を使用して求められます。

import numpy as np

matrix = np.array([[1, 2], [3, 4]])

# Eigenvalues and eigenvectors of a matrix
eigenvalues, eigenvectors = np.linalg.eig(matrix)
print("Eigenvalues:", eigenvalues)
print("Eigenvectors:\n", eigenvectors)

numpyの行列型の違い: ndarrayとmatrix

こちらでは、「numpyの行列型の違い」についてお伝えしていきます。

numpyにはndarrayとmatrixという二つの行列型の特性と使い分けについて学びましょう。

  • ndarrayとmatrix: どちらを使うべきか
  • ndarrayとmatrixの主な違い

ndarrayとmatrix: どちらを使うべきか

numpyのndarrayは、n次元配列を扱うためのデータ型です。

一方、matrixは2次元配列に特化しています。

一般的には、ndarrayのほうが柔軟性が高く、広く使われています。

import numpy as np

# Using ndarray
ndarray = np.array([[1, 2], [3, 4]])
print(type(ndarray))

# Using matrix
matrix = np.matrix([[1, 2], [3, 4]])
print(type(matrix))

ndarrayとmatrixの主な違い

ndarrayとmatrixの最大の違いは、行列の演算がどのように扱われるかです。

  • matrix: ‘*’演算子が行列積を表す
  • ndarray: ‘*’演算子が要素ごとの積を表す
import numpy as np

# Multiplication with ndarray
ndarray = np.array([[1, 2], [3, 4]])
print("ndarray multiplication:\n", ndarray * ndarray)

# Multiplication with matrix
matrix = np.matrix([[1, 2], [3, 4]])
print("matrix multiplication:\n", matrix * matrix)

内積を理解する: 実例つき解説

こちらでは、「内積」についてお伝えしていきます。

行列の内積のコードと、基底ベクトルと一次変換による内積の理解を深めていきましょう。

  • 行列の内積を求めるコード
  • 内積の求め方: 基底ベクトルと一次変換による理解

行列の内積を求めるコード

行列の内積は、numpyのdot()関数または@演算子を使って計算できます。

これは、行列の行と列の要素同士の積の和として定義されるものです。

import numpy as np

matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])

# Inner product using dot function
inner_product = np.dot(matrix1, matrix2)
print("Inner product using dot:\n", inner_product)

# Inner product using @ operator
inner_product_at = matrix1 @ matrix2
print("Inner product using @:\n", inner_product_at)

内積の求め方: 基底ベクトルと一次変換による理解

内積は、幾何学的には、ひとつのベクトルをもうひとつのベクトルに射影したときの長さとしても解釈できます。

これは、基底ベクトルの変換としても理解できます。

import numpy as np

vector1 = np.array([1, 2])
vector2 = np.array([3, 4])

# Geometric interpretation of inner product
inner_product = np.dot(vector1, vector2)
print("Geometric inner product:", inner_product)

まとめ: Pythonで行列操作のマスターへ

当記事では、Pythonの行列操作について学習してきました。

行列操作は、機械学習、画像処理、シミュレーションなど、多くの分野で不可欠です。

効率的な行列操作を行うことで、計算時間を短縮し、より複雑な問題に対処できます。

当記事を通じて、Pythonのnumpyライブラリを使用した基本的な行列操作から、特殊な操作、行列型の違い、内積の理解に至るまで幅広く学べたはず。

これらの知識を活かして、Pythonでの行列操作を効率的におこない、さまざまなアプリケーションで利用できます。

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