この記事では、Pythonの数値計算ライブラリNumPyを用いたテンソル操作と計算について詳しく解説します。具体的なコード例とその解説、さらには応用例を2つ含めています。この知識を使って、データ解析や機械学習、科学計算などの高度なタスクを効率よく行えるようになりましょう。
目次
はじめに:NumPyとは
NumPy(Numerical Python)は、Pythonで数値計算を効率的に行うためのライブラリです。多次元配列(テンソル)を高速に操作できる機能が多数含まれており、科学計算からデータ分析、機械学習に至るまで幅広い用途で使用されています。
基本的なテンソル操作
NumPyで扱う基本的なデータ構造はndarray(n次元配列)です。以下のサンプルコードは、ndarrayを生成し基本的なテンソル操作を行っています。
import numpy as np
# 1次元配列(ベクトル)を生成
a = np.array([1, 2, 3])
# 2次元配列(行列)を生成
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 配列の形状を取得
print(a.shape) # (3,)
print(b.shape) # (3, 3)
スライスとインデックス
NumPy配列では、Pythonのリストと同様にスライスやインデックスを用いて要素にアクセスできます。
# bの1行目を取得
print(b[0]) # [1 2 3]
# bの最後の列を取得
print(b[:, -1]) # [3 6 9]
高度なテンソル計算
NumPyには、行列計算に必要な関数が豊富に用意されています。
行列の積
行列の積を計算するには`np.dot`または`@`オペレータを用います。
# 行列の積を計算
result = np.dot(b, b)
# または
result = b @ b
print(result)
逆行列と行列式
逆行列や行列式も簡単に計算できます。
# 逆行列
inv_b = np.linalg.inv(b)
# 行列式
det_b = np.linalg.det(b)
print(inv_b)
print(det_b)
応用例1:画像処理
NumPyは、画像処理にも使用されます。例えば、画像をグレースケールに変換する処理は以下のように行えます。
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
# 画像を読み込む
img = mpimg.imread('example.jpg')
# グレースケールに変換
gray_img = np.dot(img[..., :3], [0.2989, 0.5870, 0.1140])
# 画像を表示
plt.imshow(gray_img, cmap='gray')
plt.show()
応用例2:線形回帰
NumPyを用いて線形回帰を実装する方法もあります。
# データ生成
X = np.array([1, 2, 3, 4, 5])
Y = np.array([3, 4, 2, 3, 5])
# モデル係数を求める
A = np.vstack([X, np.ones(len(X))]).T
m, c = np.linalg.lstsq(A, Y, rcond=None)[0]
# 回帰線を描画
plt.plot(X, Y, 'o')
plt.plot(X, m*X + c, 'r')
plt.show()
まとめ
この記事では、NumPyでの基本的なテンソル操作から高度な計算、さらには応用例に至るまで詳しく解説しました。この知識を活用して、更に高度なデータ解析や機械学習に挑戦してみてください。
コメント