NumPyのexp関数で指数関数を計算する3つの方法まとめ

NumPyのexp関数は、底をネイピア数e とする指数関数の値を計算する関数です。

「指数関数」とは、下図で示しているように、定数である底a に対する’べき乗’によって計算される関数のことです。

指数関数とは、底aと指数変数xからなる関数であり、値はaのx乗によって計算されます。

そして、NumPyには 3種類のexp関数が用意されています。

  • exp: ネイピア数e を底とする指数関数
  • expm1: ネイピア数e の指数関数 – 1 (y=ex-1)
  • exp2: 2 を底とする指数関数

このページでは、これら3つの関数について見ていきたいと思います。

なお、「ネイピア数」とは 2.718281…の無理数であり、自然対数の底でもあります。対数については、『NumPyのlog関数で対数を取得する4つの方法まとめ』で解説していますのでご確認頂ければと思います。

つまり x = logey のとき ex = y です。このネイピア数は、非常に便利な数学的性質を持ち、統計学や機械学習でよく使われます。

目次

1. 書式

まずは np.exp関数の書き方を確認しましょう。

np.exp関数

書き方:

np.exp(x),  np.expm1(x),  np.exp2(x)
引数     解説
x   array_like 任意の配列を渡します。
* この他に、キーワード引数としてufunc(ユニバーサル・ファンクション)を使用可能です。具体的には、out, where, axes, axis, keepdims, casting, order, dtype, subok, signature, extobj です。しかし、これらは高度な操作を行いたい時に使うものであり、基本的には使いません。

戻り値: 

ndarray or scalar:
渡した配列x のそれぞれの要素ごとに計算した指数関数の値を要素とする配列を返します。もし配列x がスカラー(要素が1つの配列)ならスカラーを返します。

Note

np.exp関数に、実数を渡した場合、戻り値の要素は常に正の数値です。複素数 a+ib を渡した場合、ex = eaeib と書くことができます。eaの部分については実数を渡した場合と同じです。eib の部分は cos b + i sin b で計算されます。

2. サンプルコード

以下の配列を例に見てみましょう。

In [1]:
import numpy as np
x = np.arange(0, 5, 0.5)
x
Out[1]:
array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])

この配列x をexp関数に渡すだけで、配列x を指数、ネイピア数e を底とする指数関数を計算します。

In [2]:
# ネイピア数e を底とする指数関数を計算
np.exp(x)
Out[2]:
array([ 1.        ,  1.64872127,  2.71828183,  4.48168907,  7.3890561 ,
       12.18249396, 20.08553692, 33.11545196, 54.59815003, 90.0171313 ])

expm1関数を使った以下のコードは、計算結果は exp(x)-1 とまったく同じです。ただし、この場合、expm1 の方が計算精度が高いため、こちらを使いましょう。

In [3]:
# exp(x)-1 と同じ
np.expm1(x)
Out[3]:
array([ 0.        ,  0.64872127,  1.71828183,  3.48168907,  6.3890561 ,
       11.18249396, 19.08553692, 32.11545196, 53.59815003, 89.0171313 ])

exp2 は 2 を底とする指数関数を計算します。

In [4]:
# 2 を底とする指数関数を計算
np.exp2(x)
Out[4]:
array([ 1.        ,  1.41421356,  2.        ,  2.82842712,  4.        ,
        5.65685425,  8.        , 11.3137085 , 16.        , 22.627417  ])

それぞれをグラフに描いて比較してみましょう。

In [5]:
import matplotlib.pyplot as plt
plt.plot(np.exp(x), label="exp")
plt.plot(np.expm1(x), label="expm1")
plt.plot(np.exp2(x), label="exp2")
plt.legend()
plt.show()

3. まとめ

以上が、NumPyのexp関数の使い方です。それぞれ目的に応じて使い分けましょう。

なお、指数関数と反対の対数関数については、『NumPyのlog関数で対数を取得する4つの方法まとめ』で解説していますので、あわせて確認しておくとよいでしょう。

なお各関数は、以下のような対応関係になっています。

指数関数対数関数
exp(x)log(x)
expm1(x)log1p(x)
exp2(x)log2(x)
log10(x)

Python初心者におすすめのプログラミングスクール

「未経験からでもPythonを学べるプログラミングスクールを探しているけど、色々ありすぎてわからない」なら、次の3つのプログラミングスクールから選んでおけば間違いはありません。

Aidemy Premium:全くの初心者ができるだけ効率よく短期間で実務的に活躍できるAI人材になることを目的とした講座。キャリアカウンセリングや転職エージェントの紹介などの転職支援も充実しており、受講者の転職成功率が高い。

AIジョブカレPythonの基本をおさえた人が、実際に機械学習やディープラーニングを活用できるようになるための講座。転職補償型があるなどキャリア支援の内容が非常に手厚く、講師の質も最高クラス。コスパ最高。Python初心者用の対策講座もある。

データミックスプログラミング経験者のビジネスマンが、更なるキャリアアップのためにデータの処理方法を学んでデータサイエンティストになるための講座。転職だけでなく起業やフリーランスとして独立する人も多い。Python初心者用の対策講座もある。

特に、あなたが以下のような目標を持っているなら、この中から選んでおけば間違いはないでしょう。

・未経験からPythonエンジニアとして就職・転職したい
・AIエンジニアやデータサイエンティストとしてキャリアアップしたい
・起業やフリーランスを視野に入れたい

理由は「Python初心者のためのおすすめプログラミングスクール3選」で解説しています。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる