NumPyのlog関数で対数を取得する4つの方法まとめ

NumPyには、対数を計算する関数として、log関数が用意されています。対数は、統計学や機械学習において、とてもよく使います。

それでは「対数」とは何でしょうか。簡単に復習しましょう。

対数は logab = x における x のことです。logab は「底a を何乗すれば bになるか?」を表します。そして、その答えである x のことを「底をa とするb の対数」と言います。

対数とは、「底を何乗したら bになるか」の答えのことです。

例えば log28 は「2 を何乗すれば 8 になるか」なので、答えは 3 です。log10100 は「10を何乗すれば100になるか」なので、答えは 2 です。底がネイピア数e のものは「自然対数」と言います。自然対数は、単純に指数関数の真逆のものです。

そして、NumPyには複数の底に対応できるように、以下の4つの種類のlog関数が用意されています。

  • log: 底をネイピア数e とするb の対数
  • log10: 底を10 とするb の対数
  • log2: 底を2 とするb の対数
  • log1p: 底をネイピア数e とするb+1 の対数

このページでは、それぞれの関数について解説します。

目次

1. 書式

早速、書き方を確認しましょう。

np.log関数

書き方:

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

戻り値: 

ndarray
渡した配列x のそれぞれの要素ごとに計算した対数を要素とする新しい配列を返します。x がスカラーの場合は、戻り値もスカラー(1つの数値のみの配列)になります。

2. サンプルコード

それでは、以下の配列の各要素の対数を取得しましょう。

In [1]:
import numpy as np
x = np.linspace(1, 2, 12)
x
Out[1]:
array([1.        , 1.09090909, 1.18181818, 1.27272727, 1.36363636,
       1.45454545, 1.54545455, 1.63636364, 1.72727273, 1.81818182,
       1.90909091, 2.        ])

この配列は、以下で示すように一次関数になっています。

In [2]:
import matplotlib.pyplot as plt
plt.plot(x, label="x")
plt.legend()
plt.show()

それでは、それぞれの関数を使って対数を取得しましょう。

In [3]:
# 自然対数(底をeとする対数)
np.log(x)
Out[3]:
array([0.        , 0.08701138, 0.16705408, 0.24116206, 0.31015493,
       0.37469345, 0.43531807, 0.49247649, 0.54654371, 0.597837  ,
       0.64662716, 0.69314718])
In [4]:
#  底を2とする対数
np.log2(x)
Out[4]:
array([0.        , 0.12553088, 0.2410081 , 0.3479233 , 0.44745898,
       0.54056838, 0.62803122, 0.71049338, 0.78849589, 0.86249648,
       0.9328858 , 1.        ])
In [5]:
#  底を10とする対数
np.log10(x)
Out[5]:
array([0.        , 0.03778856, 0.07255067, 0.10473535, 0.13469857,
       0.1627273 , 0.18905624, 0.21387982, 0.23736092, 0.25963731,
       0.28082661, 0.30103   ])
In [6]:
#  底をeとするx+1の対数
np.log1p(x)
Out[6]:
array([0.69314718, 0.73759894, 0.78015856, 0.82098055, 0.86020127,
       0.89794159, 0.93430924, 0.96940056, 1.00330211, 1.03609193,
       1.06784063, 1.09861229])

なお、np.log1p(x) np.log(1+x) と同じです。ただし、配列x の要素が実数である場合、np.log1pの方が計算精度に優れています。

それでは、それぞれの対数をグラフに描いて比較してみましょう。

In [7]:
import matplotlib.pyplot as plt
x = np.linspace(1,10,100)
plt.plot(x, label="x")
plt.plot(np.log(x), label="log")
plt.plot(np.log2(x), label="log2")
plt.plot(np.log10(x), label="log10")
plt.plot(np.log1p(x), label="log1p")
plt.legend()
plt.show()

3. まとめ

以上が、NumPyのlog関数の使い方です。それぞれ、底に応じて4つの関数を使い分けましょう。

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

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

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

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

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

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

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

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

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

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

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



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

この記事を書いた人

コメント

コメントする

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

目次
閉じる