[Python] NumPy – 行列を作成する方法
NumPyでは、行列を作成するために主にnumpy.array()
やnumpy.matrix()
を使用します。
numpy.array()
は多次元配列を作成するための一般的な関数で、リストやタプルを引数に渡すことで行列を作成できます。
例えば、numpy.array([[1, 2], [3, 4]])
は2×2の行列を生成します。
numpy.matrix()
は行列専用のデータ型を作成しますが、現在は推奨されていません。
行列演算にはnumpy.dot()
や@
演算子を使用します。
NumPyで行列を作成する方法
NumPyはPythonで数値計算を行うための強力なライブラリで、行列や多次元配列の操作が得意です。
ここでは、NumPyを使ってさまざまな行列を作成する方法を紹介します。
numpy.array()を使った行列の作成
numpy.array()
を使用すると、リストやタプルから簡単に行列を作成できます。
import numpy as np
# リストから行列を作成
matrix = np.array([[1, 2, 3], [4, 5, 6]])
print(matrix)
[[1 2 3]
[4 5 6]]
numpy.zeros()を使ったゼロ行列の作成
numpy.zeros()
を使うと、指定した形状のゼロで埋められた行列を作成できます。
import numpy as np
# 3行2列のゼロ行列を作成
zero_matrix = np.zeros((3, 2))
print(zero_matrix)
[[0. 0.]
[0. 0.]
[0. 0.]]
numpy.ones()を使った全ての要素が1の行列の作成
numpy.ones()
を使用すると、全ての要素が1の行列を作成できます。
import numpy as np
# 2行3列の全ての要素が1の行列を作成
ones_matrix = np.ones((2, 3))
print(ones_matrix)
[[1. 1. 1.]
[1. 1. 1.]]
numpy.eye()を使った単位行列の作成
numpy.eye()
を使うと、対角成分が1でそれ以外が0の単位行列を作成できます。
import numpy as np
# 4x4の単位行列を作成
identity_matrix = np.eye(4)
print(identity_matrix)
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
numpy.full()を使った任意の値で埋めた行列の作成
numpy.full()
を使用すると、指定した値で埋められた行列を作成できます。
import numpy as np
# 2行2列の行列を全て7で埋める
full_matrix = np.full((2, 2), 7)
print(full_matrix)
[[7 7]
[7 7]]
numpy.random()を使ったランダム行列の作成
numpy.random
モジュールを使うと、ランダムな値で埋められた行列を作成できます。
import numpy as np
# 3行3列のランダム行列を作成
random_matrix = np.random.rand(3, 3)
print(random_matrix)
[[0.12345678 0.23456789 0.3456789 ]
[0.45678901 0.56789012 0.67890123]
[0.78901234 0.89012345 0.90123456]]
これらの方法を使うことで、さまざまな行列を簡単に作成することができます。
NumPyを活用して、効率的な数値計算を行いましょう。
行列の基本操作
NumPyを使用すると、行列に対してさまざまな基本操作を簡単に行うことができます。
ここでは、行列の形状確認、要素へのアクセス、転置、リサイズ、結合について説明します。
行列の形状を確認するshape
行列の形状は、shape
属性を使って確認できます。
形状は、行数と列数のタプルとして返されます。
import numpy as np
# 行列を作成
matrix = np.array([[1, 2, 3], [4, 5, 6]])
# 行列の形状を確認
shape = matrix.shape
print(shape)
(2, 3)
行列の要素にアクセスする方法
行列の要素には、インデックスを使ってアクセスできます。
インデックスは0から始まります。
import numpy as np
# 行列を作成
matrix = np.array([[1, 2, 3], [4, 5, 6]])
# 特定の要素にアクセス
element = matrix[1, 2] # 2行目の3列目の要素
print(element)
6
行列の転置transpose
行列の転置は、transpose()メソッド
またはT
属性を使って行います。
行と列が入れ替わります。
import numpy as np
# 行列を作成
matrix = np.array([[1, 2, 3], [4, 5, 6]])
# 行列の転置
transposed_matrix = matrix.transpose()
print(transposed_matrix)
[[1 4]
[2 5]
[3 6]]
行列のリサイズreshape
reshape()メソッド
を使うと、行列の形状を変更できます。
新しい形状は元の要素数と一致する必要があります。
import numpy as np
# 行列を作成
matrix = np.array([[1, 2, 3], [4, 5, 6]])
# 行列のリサイズ
reshaped_matrix = matrix.reshape((3, 2))
print(reshaped_matrix)
[[1 2]
[3 4]
[5 6]]
行列の結合concatenate
numpy.concatenate()
を使うと、複数の行列を結合できます。
結合する軸を指定することも可能です。
import numpy as np
# 行列を作成
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])
# 行列の結合
concatenated_matrix = np.concatenate((matrix1, matrix2), axis=0) # 縦に結合
print(concatenated_matrix)
[[1 2]
[3 4]
[5 6]
[7 8]]
これらの基本操作を理解することで、NumPyを使った行列の扱いがよりスムーズになります。
行列の操作をマスターして、データ分析や数値計算に役立てましょう。
行列の演算
NumPyを使用すると、行列に対してさまざまな演算を簡単に行うことができます。
ここでは、行列の加算・減算、スカラー倍、行列の積、逆行列、行列式、固有値について説明します。
行列の加算・減算
同じ形状の行列同士は、加算や減算が可能です。
要素ごとに計算が行われます。
import numpy as np
# 行列を作成
matrix1 = np.array([[1, 2, 3], [4, 5, 6]])
matrix2 = np.array([[7, 8, 9], [10, 11, 12]])
# 行列の加算
sum_matrix = matrix1 + matrix2
print("加算結果:\n", sum_matrix)
# 行列の減算
difference_matrix = matrix1 - matrix2
print("減算結果:\n", difference_matrix)
加算結果:
[[ 8 10 12]
[14 16 18]]
減算結果:
[[-6 -6 -6]
[-6 -6 -6]]
行列のスカラー倍
行列の全ての要素にスカラー値を掛けることができます。
import numpy as np
# 行列を作成
matrix = np.array([[1, 2], [3, 4]])
# スカラー倍
scaled_matrix = matrix * 3
print(scaled_matrix)
[[ 3 6]
[ 9 12]]
行列の積dotと@演算子
行列の積は、dot()メソッド
または@
演算子を使って計算できます。
行列の内積が計算されます。
import numpy as np
# 行列を作成
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])
# 行列の積
product_matrix_dot = np.dot(matrix1, matrix2)
product_matrix_at = matrix1 @ matrix2
print("dot演算子による積:\n", product_matrix_dot)
print("@演算子による積:\n", product_matrix_at)
dot演算子による積:
[[19 22]
[43 50]]
@演算子による積:
[[19 22]
[43 50]]
行列の逆行列inv
逆行列は、行列が正方行列である場合にのみ存在します。
numpy.linalg.inv()
を使って計算できます。
import numpy as np
# 行列を作成
matrix = np.array([[1, 2], [3, 4]])
# 行列の逆行列
inverse_matrix = np.linalg.inv(matrix)
print(inverse_matrix)
[[-2. 1. ]
[ 1.5 -0.5]]
行列の行列式det
行列の行列式は、正方行列に対して計算できます。
numpy.linalg.det()
を使って求めます。
import numpy as np
# 行列を作成
matrix = np.array([[1, 2], [3, 4]])
# 行列の行列式
determinant = np.linalg.det(matrix)
print(determinant)
-2.0000000000000004
行列の固有値eig
固有値と固有ベクトルは、numpy.linalg.eig()
を使って計算できます。
import numpy as np
# 行列を作成
matrix = np.array([[1, 2], [2, 1]])
# 固有値と固有ベクトルを計算
eigenvalues, eigenvectors = np.linalg.eig(matrix)
print("固有値:\n", eigenvalues)
print("固有ベクトル:\n", eigenvectors)
固有値:
[ 3. -1.]
固有ベクトル:
[[ 0.70710678 -0.70710678]
[ 0.70710678 0.70710678]]
これらの演算を理解することで、NumPyを使った行列の計算がより効果的に行えるようになります。
行列演算を活用して、データ分析や数値計算を行いましょう。
応用例:行列を使ったデータ分析
行列はデータ分析や機械学習の分野で非常に重要な役割を果たします。
ここでは、行列を使ったいくつかの応用例を紹介します。
行列を使った線形回帰
線形回帰は、与えられたデータに基づいて直線をフィッティングする手法です。
行列を使って、回帰係数を求めることができます。
import numpy as np
# データセット
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]]) # 特徴量
y = np.array([1, 2, 2, 3]) # 目的変数
# 行列の形を整える
X_b = np.c_[np.ones((X.shape[0], 1)), X] # バイアス項を追加
# 正規方程式を使って回帰係数を計算
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
print("回帰係数:", theta_best)
回帰係数: [0. 1. 1.]
行列を使った主成分分析(PCA)
主成分分析は、高次元データを低次元に圧縮する手法です。
行列の固有値分解を用いて、データの分散を最大化する方向を見つけます。
import numpy as np
# サンプルデータ
X = np.array([[2.5, 2.4], [0.5, 0.7], [2.2, 2.9], [1.9, 2.2], [3.1, 3.0]])
# データの平均を引く
X_meaned = X - np.mean(X, axis=0)
# 共分散行列を計算
cov_matrix = np.cov(X_meaned, rowvar=False)
# 固有値と固有ベクトルを計算
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)
# 主成分を取得
principal_components = eigenvectors[:, :2] # 上位2つの主成分
print("主成分:\n", principal_components)
主成分:
[[ 0.72474155 -0.68902082]
[ 0.68902082 0.72474155]]
行列を使った画像処理
画像は行列として表現され、各ピクセルの色が行列の要素に対応します。
行列演算を使って画像のフィルタリングや変換が行えます。
import numpy as np
import matplotlib.pyplot as plt
# サンプル画像を生成
image = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
# 画像を表示
plt.imshow(image, cmap='gray')
plt.title("元の画像")
plt.show()
# 画像のスカラー倍
scaled_image = image * 2
# スカラー倍した画像を表示
plt.imshow(scaled_image, cmap='gray')
plt.title("スカラー倍した画像")
plt.show()
行列を使った機械学習モデルの構築
機械学習モデルは、行列を使ってデータを表現し、学習を行います。
例えば、ニューラルネットワークでは、重み行列を使って入力データを変換します。
import numpy as np
# 入力データ
X = np.array([[0.1, 0.2], [0.3, 0.4]])
# 重み行列
weights = np.array([[0.5, 0.6], [0.7, 0.8]])
# 出力を計算
output = X.dot(weights)
print("出力:\n", output)
出力:
[[0.19 0.22]
[0.43 0.50]]
これらの応用例を通じて、行列がデータ分析や機械学習においてどれほど重要であるかがわかります。
行列を活用して、さまざまなデータ処理や分析を行いましょう。
まとめ
この記事では、NumPyを使用した行列の作成や基本操作、演算、応用例について詳しく解説しました。
行列はデータ分析や機械学習において非常に重要な役割を果たしており、さまざまな手法で活用されています。
これを機に、NumPyを使った行列操作を実践し、データ分析や機械学習のスキルを向上させてみてください。