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)が発生することに注意してください。また、これらの関数には浮動小数点数を渡すことも可能です。ぜひ、浮動小数点数を使った例もご自身で試してみてください。
-
Pythonで基数Kに変換した数値の桁の合計を求める方法
問題の概要10進数(基数10)で表された数値 n と、別の基数 k が与えられたとします。このとき、n を基数10から基数 k に変換した後の各桁の合計を求める必要があります。桁の合計を計算する際には、各桁を通常の10進数として扱う点に注意してください。例えば、入力が n = 985、k = 8 の場合を考えてみましょう。985 を8進数に変換すると「1731」になります。したがって、桁の合計は 1 + 7 + 3 + 1 = 12 となります。解法のアルゴリズムこの問題は、基数変換の仕組みを利用することで簡単に解けます。手順は以下の通りです。答えを格納する変数 ans を 0 で初期化します
-
Pythonプログラムの実行方法まとめ!IDLE・コマンドライン・PyCharmなど5つの方法を解説
コードを書いたら、次はそれを実行して出力結果を確認する必要があります。プログラムを実行することで、書いたコードが正しく動作し、期待通りの結果が得られるかどうかをチェックできます。幸いなことに、Pythonプログラムの実行はとても簡単です。この記事では、代表的な5つの実行方法をわかりやすく解説します。IDLEで実行するPythonに標準で付属しているIDLEを使ってプログラムを実行するには、以下の手順に従います。Pythonのコードを書いて保存します。メニューから「Run > Run Module」を選択するか、キーボードのF5キーを押すだけで実行できます。IDLEは初心者にとって扱いやす