Pythonで自然ログを計算します

使用math.log標準のPythonコードの数値の自然対数(ベースE)を計算し、に切り替えるにはnumpy.log高速で、アレイ上のベクトル化された操作が必要な場合。どちらもデフォルトでlnを返します。 Numpyは、アレイのような入力と複雑な値をさらに受け入れます。

方法1 - 数学モジュール(スカラー)でLNを計算する

ステップ1:数学モジュールをインポートします。

import math

ステップ2:使用して正の数の自然ログを計算しますmath.log(x)

x = 2.0
print(math.log(x))        # 0.6931471805599453

ステップ3:必要に応じて、別のベースで対数を計算する2番目の引数を提供します。

print(math.log(100, 10))   # 2.0 (log base 10 of 100)

ステップ4:上昇する非陽性の入力を防ぎますValueError

関連している:

def safe_ln(v: float) -> float:
    if v <= 0:
        raise ValueError("ln is undefined for non-positive values.")
    return math.log(v)

print(safe_ln(1.0))       # 0.0

ヒント:ゼロに非常に近い値の場合、math.log1p(x)LN(1+X)により精度が向上します。

オプション2 - numpy(スカラー、リスト、ndarrays)でLNを計算する

ステップ1:numpyをインポートします。

import numpy as np

ステップ2:適用するnp.logスカラー、リスト、またはnumpy配列に。

arr = np.array([1, 2, 3, 4], dtype=float)
print(np.log(arr))        # [0.         0.69314718 1.09861229 1.38629436]

ステップ3:無効な結果を避けるために、ゼロとネガを明示的に処理します。

# Configure how NumPy reports floating errors (optional).
np.seterr(divide="ignore", invalid="ignore")

data = np.array([1.0, 0.0, -2.0, 3.0])
logs = np.log(data)                 # [-0.         -inf  nan  1.09861229]

# Mask out invalids for downstream use.
valid_mask = data > 0
logs_clean = np.full_like(data, np.nan)
logs_clean[valid_mask] = np.log(data[valid_mask])
print(logs_clean)                   # [0.         nan nan 1.09861229]

ステップ4:必要に応じて、他のベースをベースの変更式で計算します。

x = np.array([10, 100, 1000], dtype=float)
base = 10.0
print(np.log(x) / np.log(base))     # [1. 2. 3.]
  • numpyは、操作を非常に大きなアレイに迅速に計算するために自動的に拡大します。
  • ゼロ近くの小さなxの場合、np.log1p(x)LN(1+x)の数値精度が向上します。

アプローチ3 - 複雑な数字で動作します

ステップ1:Scalar Complex値のために複雑な数学ライブラリをインポートします。

import cmath

ステップ2:使用cmath.log複雑なスカラー用またはnp.log複雑な配列用。

z = 3 + 2j
print(cmath.log(z))       # (1.2824746787307684+0.5880026035475675j)

z_arr = np.array([1+1j, 2+0j, -1+0j], dtype=complex)
print(np.log(z_arr))      # Complex-valued natural logs
  • 実際の価値mathモジュールは複雑な入力をサポートしていません。使用cmathまたはNumpy Complexアレイ。

それだけですmath.log簡単なスカラーLNおよびnp.logベクトル化された配列操作または複雑な数字が必要な場合、実際のワークフローで非陽性の入力を守ることを忘れないでください。

Related Posts