Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのmathモジュールで使える4種類の対数関数の使い方を徹底解説

はじめに

このチュートリアルでは、Pythonのmathモジュールに含まれる対数関数について詳しく解説します。Pythonには4種類の対数関数が用意されており、すべてmathモジュールから利用できます。それぞれの特徴と使い方を順番に見ていきましょう。

math.log(数値, [基数])

math.log(number, [Base])メソッドは、任意の基数(Base)における対数を計算します。基数を省略した場合は、デフォルトの底として自然対数の底e(ネイピア数)が使用されます。

注意:負の数を引数に渡すとValueErrorが発生するので気をつけてください。

サンプルコード

# mathモジュールをインポート
import math
# 基数7での対数を計算
print(math.log(15, 7))

実行結果

上記のプログラムを実行すると、次の出力が得られます。

1.3916625094004957

基数は任意の値を指定できます。次に、基数を指定せずに同じ計算を行ってみましょう。デフォルトの底はeです。

サンプルコード

# mathモジュールをインポート
import math
# 基数e(デフォルト)での対数を計算
print(math.log(15))

実行結果

2.70805020110221

負の数を渡した場合

math.log()メソッドに負の数を渡すとどうなるか見てみましょう。

# mathモジュールをインポート
import math
# 負の数の対数を計算しようとする
print(math.log(-15))

実行結果

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-6-b686fcb806c6> in <module>
      3
      4 # 対数の計算
----> 5 print(math.log(-15))
ValueError: math domain error

対数は正の数に対してのみ定義されているため、負の数を渡すと「math domain error」が発生します。

math.log2(数値)

基数2の対数を求めたい場合は、math.log2()メソッドを使用します。使い方は前述のmath.logとほぼ同じです。

サンプルコード

# mathモジュールをインポート
import math
# 基数2での対数を計算
print(math.log2(15))

実行結果

3.9068905956085187

math.logメソッドと同様に、負の数をmath.log2メソッドに渡すとエラーになります。

サンプルコード

# mathモジュールをインポート
import math
# 基数2・負の数での対数を計算しようとする
print(math.log2(-15))

実行結果

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-3-8019b45e571f> in <module>
      3
      4 # 基数2・負の数での対数
----> 5 print(math.log2(-15))
ValueError: math domain error

math.log10(数値)

常用対数(基数10の対数)を求めるには、math.log10メソッドを使用します。これもmath.log2メソッドと同様の使い方です。

サンプルコード

# mathモジュールをインポート
import math
# 基数10での対数を計算
print(math.log10(15))

実行結果

1.1760912590556813

math.log10メソッドにも負の数を渡してみましょう。先ほどと同じエラーが発生します。

サンプルコード

# mathモジュールをインポート
import math
# 基数10・負の数での対数を計算しようとする
print(math.log10(-15))

実行結果

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-5-52ac56b802ca> in <module>
      3
      4 # 基数10・負の数での対数
----> 5 print(math.log10(-15))
ValueError: math domain error

math.log1p(数値)

math.log1p(x)メソッドは、底eにおけるlog(1 + x)を計算します。つまり、引数に1を加えた値の自然対数を求める関数です。特に小さな値に対して高い精度で計算できるのが特徴です。

サンプルコード

# mathモジュールをインポート
import math
# log(1 + 15) を計算
print(math.log1p(15)) # math.log(16) と同じ結果

実行結果

2.772588722239781

math.log1pメソッドにも負の数を渡してみます。ここでも同様のエラーが発生するはずです。

サンプルコード

# mathモジュールをインポート
import math
# log(1 + (-15)) を計算しようとする
print(math.log1p(-15))

実行結果

引数に1を加えた値が負になるため、次のエラーが出力されます。

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-15-26016884cb23> in <module>
      3
      4 # 対数の計算
----> 5 print(math.log1p(-15))
ValueError: math domain error

まとめ

このチュートリアルでは、mathモジュールが提供する4種類の対数関数を紹介しました。

  • math.log(x, [base]):任意の基数の対数を計算(デフォルトは底e)
  • math.log2(x):基数2の対数を計算
  • math.log10(x):基数10の対数を計算
  • math.log1p(x):log(1 + x) を高精度で計算

いずれの関数も、負の数を引数に渡すとValueError(math domain error)が発生することに注意してください。また、これらの関数には浮動小数点数を渡すことも可能です。ぜひ、浮動小数点数を使った例もご自身で試してみてください。

  1. Pythonで基数Kに変換した数値の桁の合計を求める方法

    問題の概要10進数(基数10)で表された数値 n と、別の基数 k が与えられたとします。このとき、n を基数10から基数 k に変換した後の各桁の合計を求める必要があります。桁の合計を計算する際には、各桁を通常の10進数として扱う点に注意してください。例えば、入力が n = 985、k = 8 の場合を考えてみましょう。985 を8進数に変換すると「1731」になります。したがって、桁の合計は 1 + 7 + 3 + 1 = 12 となります。解法のアルゴリズムこの問題は、基数変換の仕組みを利用することで簡単に解けます。手順は以下の通りです。答えを格納する変数 ans を 0 で初期化します

  2. Pythonプログラムの実行方法まとめ!IDLE・コマンドライン・PyCharmなど5つの方法を解説

    コードを書いたら、次はそれを実行して出力結果を確認する必要があります。プログラムを実行することで、書いたコードが正しく動作し、期待通りの結果が得られるかどうかをチェックできます。幸いなことに、Pythonプログラムの実行はとても簡単です。この記事では、代表的な5つの実行方法をわかりやすく解説します。IDLEで実行するPythonに標準で付属しているIDLEを使ってプログラムを実行するには、以下の手順に従います。Pythonのコードを書いて保存します。メニューから「Run > Run Module」を選択するか、キーボードのF5キーを押すだけで実行できます。IDLEは初心者にとって扱いやす