8. ユニバーサル関数(ufunc)の利用¶
NumPy には「ユニバーサル関数(ufunc)」と呼ばれる、配列要素ごとに効率的に処理を行うための関数群があります。これにより、繰り返し処理を行わずに、高速に計算を行うことができます。この章では、ユニバーサル関数の基本的な使い方を学びましょう。
8.1 ユニバーサル関数とは¶
ユニバーサル関数(ufunc)は、配列の各要素に対して繰り返し同じ操作を行う関数のことです。例えば、平方根や指数、三角関数などが ufunc として用意されています。
8.2 基本的な ufunc の使い方¶
まずは NumPy のユニバーサル関数をどのように使用するのか、基本的な例を見てみましょう。
8.2.1 ufunc の基本例¶
以下は、NumPy のnp.sqrt
(平方根を求める関数)を使った基本的な例です。
import numpy as np
# 配列を作成
a = np.array([1, 4, 9, 16, 25])
# ユニバーサル関数 'np.sqrt' を使用して平方根を計算
result = np.sqrt(a)
print("配列 a:", a)
print("平方根:", result)
この例では、np.sqrt
関数を使って、配列a
の各要素の平方根を計算しています。
8.3 その他のユニバーサル関数¶
NumPy は非常に多くのユニバーサル関数を提供しています。ここでは、いくつか代表的なものを紹介します。
8.3.1 np.exp(指数関数)¶
import numpy as np
# 配列を作成
a = np.array([0, 1, 2, 3, 4])
# 'np.exp' を使用して指数を計算
result = np.exp(a)
print("配列 a:", a)
print("指数:", result)
8.3.2 np.sin(正弦関数)¶
import numpy as np
# 配列を作成
angles = np.array([0, np.pi/2, np.pi, 3*np.pi/2])
# 'np.sin' を使用して正弦を計算
result = np.sin(angles)
print("角度 (ラジアン):", angles)
print("正弦:", result)
8.3.3 np.log(対数関数)¶
import numpy as np
# 配列を作成
b = np.array([1, np.e, np.e**2, np.e**3])
# 'np.log' を使用して自然対数を計算
result = np.log(b)
print("配列 b:", b)
print("自然対数:", result)
8.4 ユニバーサル関数の効率性¶
ユニバーサル関数は、Python のループを使うよりも効率的に計算を行います。この理由は、NumPy が C 言語で実装されており、低レベルで最適化されているからです。また、ブロードキャスト機能を活用することにより、異なるサイズの配列同士でも効率的に計算を行うことができます。
実際にコードを記述して実行し、ユニバーサル関数の利便性と効率性を体験してみてください。テストするときには、異なる関数やより大きな配列を試して、自分でその速さを確認してみるのも良い学習になります。