numpyで指数関数(exp)を計算する方法について解説します。numpyのexp関数を使うことで、配列の各要素に対して効率的に指数関数を適用できます。また、np.powerとの速度比較も行い、どちらが適しているかを検証します。
np.expの基本的な使い方
np.expは自然対数の底eを底とする指数関数e^xを計算するnumpyの関数です。数学的にはexp(x) = e^xを表します。numpyのexp関数は、単一の値や配列に対しても使用でき、非常に高速に計算を行います。
単一の値に対する指数関数の計算
単一の数値に対してe^xを計算する方法です。
import numpy as np
# 単一の値に対する指数関数
x = 2
result = np.exp(x)
print(result) # 7.38905609893065
配列に対する指数関数の計算
numpy配列の各要素に対して指数関数を適用する方法です。
import numpy as np
# 配列に対する指数関数
arr = np.array([1, 2, 3, 4, 5])
result = np.exp(arr)
print(result) # [ 2.71828183 7.3890561 20.08553692 54.59815003 148.4131591 ]
2次元配列に対する指数関数の計算
2次元配列の各要素に対して指数関数を適用する方法です。
import numpy as np
# 2次元配列に対する指数関数
matrix = np.array([[1, 2], [3, 4]])
result = np.exp(matrix)
print(result)
# [[ 2.71828183 7.3890561 ]
# [20.08553692 54.59815003]]
負の値に対する指数関数の計算
負の値に対してもnp.expを適用できます。
import numpy as np
# 負の値に対する指数関数
negative_arr = np.array([-2, -1, 0, 1, 2])
result = np.exp(negative_arr)
print(result) # [0.13533528 0.36787944 1. 2.71828183 7.3890561 ]
np.powerとの速度比較
np.expとnp.powerの実行時間比較
指数関数e^xを計算する際のnp.expとnp.powerの速度を比較します。
import numpy as np
import time
# 大きな配列を作成
large_array = np.random.rand(1000000)
# np.expの実行時間測定
start_time = time.time()
result_exp = np.exp(large_array)
exp_time = time.time() - start_time
# np.powerの実行時間測定
start_time = time.time()
result_power = np.power(np.e, large_array)
power_time = time.time() - start_time
print(f"np.exp実行時間: {exp_time:.6f}秒") # np.exp実行時間: 0.003795秒
print(f"np.power実行時間: {power_time:.6f}秒") # np.power実行時間: 0.013885秒
print(f"速度比: {power_time/exp_time:.2f}倍") # 速度比: 3.66倍
実用的な応用例
確率密度関数での使用
正規分布の確率密度関数でnp.expを使用する例です。
import numpy as np
import matplotlib.pyplot as plt
# 正規分布の確率密度関数
def normal_pdf(x, mu=0, sigma=1):
return (1 / (sigma * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - mu) / sigma) ** 2)
# xの値を生成
x = np.linspace(-4, 4, 100)
y = normal_pdf(x)
# グラフを描画
plt.plot(x, y)
plt.title('Normal Distribution PDF')
plt.xlabel('x')
plt.ylabel('Probability Density')
plt.grid(True)
plt.show()

matplotlibの使い方は以下を参照ください。
指数減衰の計算
物理現象でよく見られる指数減衰をnp.expで計算する例です。
import numpy as np
# 指数減衰の計算
def exponential_decay(initial_value, decay_constant, time):
return initial_value * np.exp(-decay_constant * time)
# パラメータ設定
initial = 100
decay = 0.1
time_points = np.linspace(0, 50, 100)
# 指数減衰を計算
values = exponential_decay(initial, decay, time_points)
print(f"初期値: {values[0]:.2f}") # 初期値: 100.00
print(f"50秒後: {values[-1]:.2f}") # 50秒後: 0.67
まとめ
numpyのexp関数は指数関数e^xを計算するための専用関数で、np.powerよりも高速に動作します。配列の各要素に対して効率的に指数関数を適用でき、科学計算や機械学習の分野で広く使用されています。特に確率密度関数や指数減衰などの計算において、np.expは重要な役割を果たします。単純な指数関数の計算にはnp.expを、より複雑な累乗計算にはnp.powerを使い分けることが推奨されます。