Skip to content

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 言語で実装されており、低レベルで最適化されているからです。また、ブロードキャスト機能を活用することにより、異なるサイズの配列同士でも効率的に計算を行うことができます。

実際にコードを記述して実行し、ユニバーサル関数の利便性と効率性を体験してみてください。テストするときには、異なる関数やより大きな配列を試して、自分でその速さを確認してみるのも良い学習になります。