この記事では、Pythonを用いて稠密行列(Dense Matrix)と疎行列(Sparse Matrix)の操作方法を詳細に説明します。具体的なコード例、その解説、応用例を含めています。
目次
はじめに
行列はデータ処理、特に機械学習や科学計算で頻繁に使用されます。しかし、稠密行列と疎行列という二つの異なる形式があり、それぞれ適した用途と特性があります。この記事では、PythonのライブラリであるNumPyとSciPyを用いた、稠密行列と疎行列の操作方法を学びます。
稠密行列とは
稠密行列は、ほとんどの要素がゼロでない行列です。Pythonでの稠密行列の操作には、NumPyが一般的に使用されます。
基本的な操作
以下は、NumPyを用いた稠密行列の基本的な操作です。
import numpy as np
# 行列を作成
mat = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 行列の要素にアクセス
element = mat[0, 1] # 2となる
行列の演算
NumPyを使って、行列の加算、減算、乗算を行います。
# 加算
sum_mat = mat + mat
# 減算
diff_mat = mat - mat
# 乗算
prod_mat = np.dot(mat, mat)
疎行列とは
疎行列は、ほとんどの要素がゼロである行列です。疎行列の操作には、SciPyがよく用いられます。
基本的な操作
以下は、SciPyを用いた疎行列の基本的な操作です。
from scipy.sparse import csr_matrix
# 疎行列を作成
sparse_mat = csr_matrix([[1, 0, 0], [0, 2, 0], [0, 0, 3]])
# 行列の要素にアクセス
element = sparse_mat[0, 0] # 1となる
行列の演算
SciPyを使って、疎行列の加算、減算、乗算を行います。
# 加算
sum_sparse = sparse_mat + sparse_mat
# 減算
diff_sparse = sparse_mat - sparse_mat
# 乗算
prod_sparse = sparse_mat.dot(sparse_mat)
応用例
画像処理における稠密行列の応用
稠密行列は画像処理でよく用いられます。以下は、画像の輝度値を調整する例です。
# グレースケール画像と仮定
image = np.array([[100, 120], [130, 140]])
# 輝度値を2倍に
adjusted_image = image * 2
自然言語処理における疎行列の応用
疎行列は、テキストデータを数値ベクトルに変換する際に有用です。以下は、単語の出現頻度を疎行列で表す例です。
from sklearn.feature_extraction.text import CountVectorizer
# テキストデータ
texts = ["apple orange orange", "banana apple", "cherry cherry apple"]
# CountVectorizerを使って疎行列に変換
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
まとめ
Pythonにおける稠密行列と疎行列の操作には、NumPyとSciPyがそれぞれ有用です。稠密行列は画像処理、疎行列はテキストデータのような特定の用途で力を発揮します。
コメント