5-3

NumPyライブラリ

リスト vs NumPy配列(ベクトル演算)リスト(ループが必要)for i in range(len(a)): c[i] = a[i] + b[i]🐢 遅いNumPy配列(一括演算)c = a + b🚀 高速(C言語で実装)

NumPyとは

NumPy(Numerical Python)は、Pythonで数値計算を高効率で行うためのライブラリです。大規模な多次元配列の演算や、数学・統計関数を提供します。

python
import numpy as np   # npという別名で使うのが慣習# NumPyのバージョン確認np.__version__

ndarray(NumPy配列)

NumPyの中心となるデータ型が ndarray(N-dimensional array)です。

python
import numpy as np# 1次元配列(ベクトル)a = np.array([1, 2, 3, 4, 5])print(a)         # [1 2 3 4 5]print(a.dtype)   # int64print(a.shape)   # (5,)# 2次元配列(行列)m = np.array([[1, 2, 3], [4, 5, 6]])print(m.shape)   # (2, 3)(2行3列)

配列の作成

python
import numpy as npnp.zeros(5)            # array([0., 0., 0., 0., 0.])np.ones((2, 3))        # 2行3列の1行列np.eye(3)              # 3×3の単位行列np.arange(0, 10, 2)   # array([0, 2, 4, 6, 8])np.linspace(0, 1, 5)  # array([0., 0.25, 0.5, 0.75, 1.])# 乱数np.random.seed(42)np.random.rand(3)          # 一様分布(0〜1)np.random.randn(3, 3)      # 標準正規分布np.random.randint(0, 10, 5) # 整数乱数

ベクトル演算(ブロードキャスト)

NumPy配列の演算は要素ごと(element-wise)に行われます。Pythonのリストとは異なります。

python
import numpy as npa = np.array([1, 2, 3, 4, 5])# スカラーとの演算(リストではできない)a + 10    # array([11, 12, 13, 14, 15])a * 2     # array([2, 4, 6, 8, 10])a ** 2    # array([1, 4, 9, 16, 25])# 配列同士の演算b = np.array([10, 20, 30, 40, 50])a + b     # array([11, 22, 33, 44, 55])a * b     # array([10, 40, 90, 160, 250])

インデックスとスライス

python
import numpy as npa = np.array([10, 20, 30, 40, 50])a[0]     # 10a[-1]    # 50a[1:4]   # array([20, 30, 40])# 2次元配列m = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])m[0, :]    # array([1, 2, 3])(0行目全体)m[:, 1]    # array([2, 5, 8])(1列目全体)m[1, 2]    # 6(1行2列)# ブール配列によるインデックスa = np.array([1, 5, 3, 8, 2, 9, 4])a[a > 4]   # array([5, 8, 9])(4より大きい要素のみ)

NumPyの数学関数

python
import numpy as npa = np.array([1, 4, 9, 16, 25])np.sqrt(a)    # array([1., 2., 3., 4., 5.])np.log(a)     # 自然対数np.exp(a)     # e^x# 統計関数a = np.array([3, 1, 4, 1, 5, 9, 2, 6])np.sum(a)     # 31np.mean(a)    # 3.875np.std(a)     # 標準偏差np.max(a)     # 9np.min(a)     # 1np.sort(a)    # array([1, 1, 2, 3, 4, 5, 6, 9])

行列演算

python
import numpy as npA = np.array([[1, 2], [3, 4]])B = np.array([[5, 6], [7, 8]])# 行列積np.dot(A, B)      # または A @ B# array([[19, 22], [43, 50]])# 転置A.T   # array([[1, 3], [2, 4]])# 逆行列np.linalg.inv(A)# 固有値・固有ベクトルeigenvalues, eigenvectors = np.linalg.eig(A)

練習: NumPyで統計計算

基礎

NumPyを使って、テストの点数データから平均・標準偏差・最高点・最低点を計算してください。

練習: 行列の操作

標準

3×3の行列を作成し、各行の合計・各列の平均を求めてください。