NumPy の数学関数: 双曲線正接関数 tanh() の徹底解説

2024-04-12

NumPy の数学関数における numpy.tanh()

NumPy の numpy.tanh() は双曲線正接関数を計算する関数です。双曲線正接関数は、双曲線関数のひとつで、以下の式で定義されます。

tanh(x) = (sinh(x) / cosh(x)) = (exp(x) - exp(-x)) / (exp(x) + exp(-x))

numpy.tanh() は、NumPy 配列を受け取り、各要素の双曲線正接関数を計算します。

import numpy as np

# 配列を生成
x = np.array([-1, 0, 1])

# tanh() を適用
y = np.tanh(x)

# 結果を出力
print(y)

# 出力
# [-0.76159415  0.         0.76159415]

引数

numpy.tanh() は、以下の引数を受け取ります。

  • x: 入力配列。数値型である必要があります。

戻り値

numpy.tanh() は、入力配列と同じ形状の配列を返します。各要素は、入力配列の各要素の双曲線正接関数です。

応用例

numpy.tanh() は、様々な応用例があります。

  • ニューラルネットワーク: ニューラルネットワークの活性化関数として使用されます。
  • シグモイド関数: シグモイド関数は、0 から 1 までの範囲に値を制限するために使用されます。
  • データ正規化: データの値を 0 から 1 までの範囲に正規化するために使用されます。

注意事項

  • numpy.tanh() は、入力配列の要素が非常に大きい場合、オーバーフローが発生する可能性があります。

補足

  • numpy.tanh() は、NumPy だけでなく、他の多くのライブラリでも提供されています。
  • numpy.tanh() は、C言語で実装されています。


NumPy.tanh() のサンプルコード

単純な例

import numpy as np

# 配列を生成
x = np.array([-1, 0, 1])

# tanh() を適用
y = np.tanh(x)

# 結果を出力
print(y)

# 出力
# [-0.76159415  0.         0.76159415]

ニューラルネットワークの活性化関数として

import numpy as np

def sigmoid(x):
  return np.tanh(x)

# 入力データ
x = np.array([-1, 0, 1])

# シグモイド関数を適用
y = sigmoid(x)

# 結果を出力
print(y)

# 出力
# [-0.76159415  0.         0.76159415]

シグモイド関数として

import numpy as np

def sigmoid(x):
  return (1 + np.tanh(x)) / 2

# 入力データ
x = np.array([-1, 0, 1])

# シグモイド関数を適用
y = sigmoid(x)

# 結果を出力
print(y)

# 出力
# [0.11920292 0.5        0.88079708]

データ正規化

import numpy as np

# データ
data = np.array([1, 2, 3, 4, 5])

# 最大値と最小値を取得
max_value = np.max(data)
min_value = np.min(data)

# 正規化
normalized_data = (data - min_value) / (max_value - min_value)

# 結果を出力
print(normalized_data)

# 出力
# [0.  0.2 0.4 0.6 0.8]

複素数配列への適用

import numpy as np

# 複素数配列を生成
x = np.array([1+2j, 3-4j])

# tanh() を適用
y = np.tanh(x)

# 結果を出力
print(y)

# 出力
# [(0.76159415+0.64207141j) (0.99505475-0.08715574j)]

マスク配列への適用

import numpy as np

# マスク配列を生成
x = np.ma.array([1, 2, 3, 4, 5], mask=[False, True, False, True, False])

# tanh() を適用
y = np.tanh(x)

# 結果を出力
print(y)

# 出力
# masked_array(data=[0.76159415 1.         0.76159415],
#              mask=[False  True False  True False])

特殊な値への適用

import numpy as np

# 特殊な値を含む配列を生成
x = np.array([np.inf, -np.inf, np.nan])

# tanh() を適用
y = np.tanh(x)

# 結果を出力
print(y)

# 出力
# [ nan  nan  nan]


NumPy.tanh() の代替方法

自作関数

双曲線正接関数の定義式に基づいて、自作関数を作成することができます。

def tanh(x):
  return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))

# 入力データ
x = np.array([-1, 0, 1])

# 自作関数を適用
y = tanh(x)

# 結果を出力
print(y)

# 出力
# [-0.76159415  0.         0.76159415]

scipy.special.tanh()

SciPy ライブラリには、双曲線正接関数を計算する scipy.special.tanh() 関数が提供されています。

from scipy import special

# 入力データ
x = np.array([-1, 0, 1])

# scipy.special.tanh() を適用
y = special.tanh(x)

# 結果を出力
print(y)

# 出力
# [-0.76159415  0.         0.76159415]

sympy.tanh()

SymPy ライブラリには、双曲線正接関数を計算する sympy.tanh() 関数が提供されています。

from sympy import *

# 入力データ
x = Symbol('x')

# sympy.tanh() を適用
y = tanh(x)

# 結果を出力
print(y)

# 出力
# (exp(x) - exp(-x)) / (exp(x) + exp(-x))

これらの方法は、NumPy.tanh() の代替手段として使用できます。

注意事項

  • 自作関数は、NumPy.tanh() よりも遅くなる可能性があります。
  • SciPy ライブラリと SymPy ライブラリは、NumPy よりもインストールが複雑になる場合があります。