NumPy三角関数完全ガイド:sin, cos, tan, arcsin, arccos, arctan の使い方と実例
NumPyの三角関数は、科学計算、データ分析、機械学習において不可欠な機能です。本記事では、NumPyで利用できる基本的な三角関数(sin、cos、tan)と逆三角関数(arcsin、arccos、arctan)の使い方を具体的なサンプルコードとともに詳しく解説します。
NumPy三角関数の基本概念
NumPyの三角関数は、数学的な三角関数をベクトル化された形で効率的に計算できる機能です。これらの関数は、配列の各要素に対して三角関数の計算を一度に実行し、高速な数値計算を可能にします。
角度の単位について
NumPyの三角関数はラジアンを標準単位として使用します。度(degree)で計算する場合は、事前に変換が必要です。
import numpy as np
# 度からラジアンへの変換
degrees = 45
radians = np.radians(degrees)
print(f"{degrees}度 = {radians}ラジアン")
基本三角関数の使い方
np.sin() – サイン関数
サイン関数は、角度に対する正弦値を計算します。
import numpy as np
# 単一値の計算
angle = np.pi/4 # 45度
sin_value = np.sin(angle)
print(f"sin({angle}) = {sin_value}")
# 配列での一括計算
angles = np.array([0, np.pi/6, np.pi/4, np.pi/3, np.pi/2])
sin_values = np.sin(angles)
print("sin値:", sin_values)
np.cos() – コサイン関数
コサイン関数は、角度に対する余弦値を計算します。
import numpy as np
# 基本的な使用例
angle = np.pi/3 # 60度
cos_value = np.cos(angle)
print(f"cos({angle}) = {cos_value}")
# 複数角度での計算
angles = np.linspace(0, 2*np.pi, 5)
cos_values = np.cos(angles)
print("cos値:", cos_values)
np.tan() – タンジェント関数
タンジェント関数は、角度に対する正接値を計算します。
import numpy as np
# タンジェントの計算
angle = np.pi/4 # 45度
tan_value = np.tan(angle)
print(f"tan({angle}) = {tan_value}")
# 注意:π/2では無限大になる
angles = np.array([0, np.pi/4, np.pi/3])
tan_values = np.tan(angles)
print("tan値:", tan_values)
逆三角関数の使い方
np.arcsin() – 逆サイン関数
逆サイン関数は、サイン値から角度を求めます。定義域は[-1, 1]です。
import numpy as np
# 逆サインの計算
sin_value = 0.5
angle = np.arcsin(sin_value)
print(f"arcsin({sin_value}) = {angle} ラジアン")
print(f"度に変換: {np.degrees(angle)}度")
# 配列での計算
sin_values = np.array([0, 0.5, 0.707, 1])
angles = np.arcsin(sin_values)
print("arcsin値:", np.degrees(angles))
np.arccos() – 逆コサイン関数
逆コサイン関数は、コサイン値から角度を求めます。定義域は[-1, 1]です。
import numpy as np
# 逆コサインの計算
cos_value = 0.5
angle = np.arccos(cos_value)
print(f"arccos({cos_value}) = {np.degrees(angle)}度")
# 複数値での計算
cos_values = np.array([1, 0.5, 0, -0.5, -1])
angles = np.arccos(cos_values)
print("arccos値(度):", np.degrees(angles))
np.arctan() – 逆タンジェント関数
逆タンジェント関数は、タンジェント値から角度を求めます。
import numpy as np
# 逆タンジェントの計算
tan_value = 1
angle = np.arctan(tan_value)
print(f"arctan({tan_value}) = {np.degrees(angle)}度")
# 2引数版 arctan2 の使用
y, x = 1, 1
angle = np.arctan2(y, x)
print(f"arctan2({y}, {x}) = {np.degrees(angle)}度")
実践的な応用例
波形データの生成
三角関数を使って、さまざまな波形を生成できます。
import numpy as np
# 時間軸の作成
t = np.linspace(0, 2*np.pi, 100)
# 各種波形の生成
sin_wave = np.sin(t)
cos_wave = np.cos(t)
tan_wave = np.tan(t)
print("サイン波の最大値:", np.max(sin_wave))
print("コサイン波の最小値:", np.min(cos_wave))
座標変換
極座標から直角座標への変換に三角関数を活用できます。
import numpy as np
# 極座標データ
r = np.array([1, 2, 3])
theta = np.array([0, np.pi/4, np.pi/2])
# 直角座標への変換
x = r * np.cos(theta)
y = r * np.sin(theta)
print("x座標:", x)
print("y座標:", y)
逆変換での角度復元
測定値から元の角度を復元する例です。
import numpy as np
# 既知の角度でサイン値を計算
original_angles = np.array([30, 45, 60])
radians = np.radians(original_angles)
sin_values = np.sin(radians)
# サイン値から角度を復元
restored_radians = np.arcsin(sin_values)
restored_degrees = np.degrees(restored_radians)
print("元の角度:", original_angles)
print("復元した角度:", restored_degrees)
注意点とエラー処理
定義域の制限
逆三角関数には定義域の制限があります。
import numpy as np
# エラーが発生する例(コメントアウト)
# invalid_value = np.arcsin(2) # ValueError
# 安全な処理
values = np.array([0.5, 1.5, -0.8])
# 有効な値のみフィルタリング
valid_mask = np.abs(values) <= 1
valid_values = values[valid_mask]
result = np.arcsin(valid_values)
print("有効な結果:", result)
数値精度の考慮
浮動小数点演算では精度に注意が必要です。
import numpy as np
# 精度の問題例
angle = np.pi/2
sin_val = np.sin(angle)
print(f"sin(π/2) = {sin_val}") # 1.0に非常に近い値
# 比較時の注意
print(f"完全に1.0か: {sin_val == 1.0}")
print(f"1.0に近似: {np.isclose(sin_val, 1.0)}")
まとめ
NumPyの三角関数は、科学計算における強力なツールです。基本三角関数(sin、cos、tan)と逆三角関数(arcsin、arccos、arctan)を適切に使い分けることで、波形処理、座標変換、信号解析などさまざまな分野で活用できます。
重要なポイント:
- 角度の単位はラジアンが標準
- 逆三角関数には定義域の制限がある
- 配列操作による高速な一括計算が可能
- 数値精度に注意した比較処理が重要
これらの関数を習得することで、より高度な数値計算やデータ解析が可能になります。