math —数学関数
このモジュールは、C標準で定義されている数学関数へのアクセスを提供します。
これらの関数は、複素数では使用できません。 複素数のサポートが必要な場合は、 cmath モジュールの同じ名前の関数を使用してください。 ほとんどのユーザーは複素数を理解するために必要なほど多くの数学を学びたくないので、複素数をサポートする関数とサポートしない関数は区別されます。 複素数の結果の代わりに例外を受け取ると、パラメーターとして使用される予期しない複素数を早期に検出できるため、プログラマーは最初にそれが生成された方法と理由を判別できます。
このモジュールでは、次の機能が提供されます。 特に明記されていない限り、すべての戻り値は浮動小数点数です。
数論および表現関数
- math.ceil(x)
- x の上限を返します。これは x 以上の最小の整数です。 x がfloatでない場合は、
x.__ceil__()
に委任します。これにより、 Integral 値が返されます。
- math.comb(n, k)
n アイテムから k アイテムを選択する方法の数を繰り返しや順序なしで返します。
k <= n
の場合はn! / (k! * (n - k)!)
と評価され、k > n
の場合はゼロと評価されます。式
(1 + x) ** n
の多項式展開のk項の係数に相当するため、二項係数とも呼ばれます。いずれかの引数が整数でない場合、 TypeError を発生させます。 いずれかの引数が負の場合、 ValueError を発生させます。
バージョン3.8の新機能。
- math.copysign(x, y)
- x の大きさ(絶対値)で、 y の符号を持つfloatを返します。 符号付きゼロをサポートするプラットフォームでは、
copysign(1.0, -0.0)
は -1.0 を返します。
- math.fabs(x)
- x の絶対値を返します。
- math.factorial(x)
x 階乗を整数として返します。 x が整数でないか負の場合、 ValueError を発生させます。
バージョン3.9以降非推奨:整数値(
5.0
など)を持つfloatの受け入れは非推奨になりました。
- math.floor(x)
- x のフロアを返します。これは x 以下の最大の整数です。 x がfloatでない場合は、
x.__floor__()
に委任します。これにより、 Integral 値が返されます。
- math.fmod(x, y)
- プラットフォームCライブラリで定義されているように、
fmod(x, y)
を返します。 Python式x % y
は同じ結果を返さない場合があることに注意してください。 C標準の目的は、fmod(x, y)
が、ある整数 n に対してx - n*y
と正確に(数学的に;無限の精度で)等しくなり、結果がと同じ符号を持つようにすることです。 x およびabs(y)
未満の大きさ。 Pythonのx % y
は、代わりに y の符号の結果を返し、float引数に対して正確に計算できない場合があります。 たとえば、fmod(-1e-100, 1e100)
は-1e-100
ですが、Pythonの-1e-100 % 1e100
の結果は1e100-1e-100
であり、フロートとして正確に表すことはできず、驚くべきことに丸められます。1e100
。 このため、浮動小数点数を操作する場合は関数 fmod()が一般的に推奨され、整数を操作する場合はPythonのx % y
が推奨されます。
- math.frexp(x)
- x の仮数と指数をペア
(m, e)
として返します。 m は浮動小数点数であり、 e はx == m * 2**e
が正確に一致するような整数です。 x がゼロの場合、(0.0, 0)
を返し、それ以外の場合は0.5 <= abs(m) < 1
を返します。 これは、フロートの内部表現をポータブルな方法で「分解」するために使用されます。
- math.fsum(iterable)
iterableの値の正確な浮動小数点合計を返します。 複数の中間部分和を追跡することにより、精度の低下を回避します。
>>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]) 0.9999999999999999 >>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]) 1.0
アルゴリズムの精度は、IEEE-754算術保証と、丸めモードが半偶数である一般的なケースに依存します。 一部のWindows以外のビルドでは、基になるCライブラリが拡張精度の加算を使用し、中間合計を2倍に丸めて、最下位ビットでオフになる場合があります。
詳細な説明と2つの代替アプローチについては、 ASPNクックブックのレシピで正確な浮動小数点の合計を参照してください。
- math.gcd(*integers)
指定された整数引数の最大公約数を返します。 引数のいずれかがゼロ以外の場合、戻り値はすべての引数の除数である最大の正の整数です。 すべての引数がゼロの場合、戻り値は
0
です。 引数なしのgcd()
は、0
を返します。バージョン3.5の新機能。
バージョン3.9で変更:任意の数の引数のサポートが追加されました。 以前は、2つの引数のみがサポートされていました。
- math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)
a と b の値が近い場合は
True
を返し、そうでない場合はFalse
を返します。2つの値が近いと見なされるかどうかは、指定された絶対公差と相対公差に従って決定されます。
rel_tol は相対許容誤差です。これは、 a の大きい方の絶対値に対する a と b の最大許容差です。 b 。 たとえば、許容誤差を5%に設定するには、
rel_tol=0.05
を渡します。 デフォルトの許容値は1e-09
です。これにより、2つの値が約9桁以内で同じになることが保証されます。 rel_tol はゼロより大きくなければなりません。abs_tol は最小絶対許容誤差であり、ゼロに近い比較に役立ちます。 abs_tol は少なくともゼロでなければなりません。
エラーが発生しない場合、結果は
abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
になります。NaN
、inf
、および-inf
のIEEE754特殊値は、IEEE規則に従って処理されます。 具体的には、NaN
は、NaN
を含む他の値に近いとは見なされません。inf
と-inf
は、それら自体に近いと見なされるだけです。バージョン3.5の新機能。
も参照してください
PEP 485 –近似等式をテストするための関数
- math.isfinite(x)
x が無限大でもNaNでもない場合は、
True
を返し、それ以外の場合はFalse
を返します。 (0.0
はが有限であると見なされることに注意してください。)バージョン3.2の新機能。
- math.isinf(x)
- x が正または負の無限大の場合は、
True
を返し、それ以外の場合はFalse
を返します。
- math.isnan(x)
- x がNaN(数値ではない)の場合は
True
を返し、それ以外の場合はFalse
を返します。
- math.isqrt(n)
非負の整数 n の整数平方根を返します。 これは、 n の正確な平方根、または a ²≤ n となる最大の整数 a のフロアです。
一部のアプリケーションでは、 n ≤ a ²、つまり正確な平方根の上限となるような最小の整数 a を使用する方が便利な場合があります。 n のルート。 正の n の場合、これは
a = 1 + isqrt(n - 1)
を使用して計算できます。バージョン3.8の新機能。
- math.lcm(*integers)
指定された整数引数の最小公倍数を返します。 すべての引数がゼロ以外の場合、戻り値はすべての引数の倍数である最小の正の整数です。 引数のいずれかがゼロの場合、戻り値は
0
です。 引数なしのlcm()
は、1
を返します。バージョン3.9の新機能。
- math.ldexp(x, i)
x * (2**i)
を返します。 これは本質的に関数 frexp()の逆です。
- math.modf(x)
- x の小数部と整数部を返します。 どちらの結果も x の符号が付いており、浮動小数点数です。
- math.nextafter(x, y)
x の次の浮動小数点値を y に向けて返します。
x が y と等しい場合は、 y を返します。
例:
math.nextafter(x, math.inf)
が上がる:正の無限大に向かって。math.nextafter(x, -math.inf)
が下がります:マイナス無限大に向かって。math.nextafter(x, 0.0)
はゼロに近づきます。math.nextafter(x, math.copysign(math.inf, x))
はゼロから離れます。
math.ulp()も参照してください。
バージョン3.9の新機能。
- math.perm(n, k=None)
n アイテムから k アイテムを選択する方法の数を繰り返しなしで順番に返します。
k <= n
の場合はn! / (n - k)!
と評価され、k > n
の場合はゼロと評価されます。k が指定されていないか、Noneの場合、 k はデフォルトで n になり、関数は
n!
を返します。いずれかの引数が整数でない場合、 TypeError を発生させます。 いずれかの引数が負の場合、 ValueError を発生させます。
バージョン3.8の新機能。
- math.prod(iterable, *, start=1)
入力 iterable のすべての要素の積を計算します。 製品のデフォルトの start 値は
1
です。iterableが空の場合、開始値を返します。 この関数は、特に数値での使用を目的としており、数値以外の型を拒否する場合があります。
バージョン3.8の新機能。
- math.remainder(x, y)
y に関して x のIEEE754スタイルの余りを返します。 有限 x と有限非ゼロ y の場合、これは差
x - n*y
です。ここで、n
の正確な値に最も近い整数です。 X161X] 。x / y
が2つの連続する整数のちょうど中間にある場合、最も近い偶数整数がn
に使用されます。 したがって、残りのr = remainder(x, y)
は、常にabs(r) <= 0.5 * abs(y)
を満たします。特殊なケースはIEEE754に従います。特に、
remainder(x, math.inf)
は任意の有限 x に対して x であり、remainder(x, 0)
およびremainder(math.inf, x)
は[非NaN x のX131X] ValueError 。 剰余演算の結果がゼロの場合、そのゼロは x と同じ符号になります。IEEE 754バイナリ浮動小数点を使用するプラットフォームでは、この操作の結果は常に正確に表現できます。丸め誤差は発生しません。
バージョン3.7の新機能。
- math.trunc(x)
- Real 値 x を Integral (通常は整数)に切り捨てて返します。 x .__ trunc __()に委任します。
- math.ulp(x)
float x の最下位ビットの値を返します。
x がNaN(数値ではない)の場合は、 x を返します。
x が負の場合は、
ulp(-x)
を返します。x が正の無限大の場合、 x を返します。
x がゼロに等しい場合、最小の正の非正規化表現可能フロート(最小の正の正規化フロートよりも小さい sys.float_info.min [ X187X])。
x が正の表現可能な最大のfloatと等しい場合、 x よりも小さい最初のfloatが[になるように、 x の最下位ビットの値を返します。 X182X] 。
それ以外の場合( x は正の有限数)、 x の最下位ビットの値を返し、 x より大きい最初の浮動小数点数が
x + ulp(x)
。
ULPは「UnitintheLastPlace」の略です。
math.nextafter()および sys.float_info.epsilon も参照してください。
バージョン3.9の新機能。
frexp()と modf()は、同等のCとは異なる呼び出し/戻りパターンを持っていることに注意してください。これらは、2番目の引数を返すのではなく、単一の引数を取り、値のペアを返します。 '出力パラメータ'を介して値を返します(Pythonにはそのようなものはありません)。
ceil()、 floor()、および modf()関数の場合、 all 浮動小数点数が十分に大きいことに注意してください。大きさは正確な整数です。 Pythonフロートは通常53ビット以下の精度(プラットフォームCダブルタイプと同じ)を持ちます。この場合、フロート x とabs(x) >= 2**52
は必ずしも小数ビットを持ちません。
パワー関数と対数関数
- math.exp(x)
- e を x の累乗で返します。ここで、 e = 2.718281…は自然対数の底です。 これは通常、
math.e ** x
またはpow(math.e, x)
よりも正確です。
- math.expm1(x)
e の累乗 x から1を引いた値を返します。 ここで、 e は自然対数の基数です。 小さなフロート x の場合、
exp(x) - 1
で減算すると、精度が大幅に低下する可能性があります。 expm1()関数は、この量を完全な精度で計算する方法を提供します。>>> from math import exp, expm1 >>> exp(1e-5) - 1 # gives result accurate to 11 places 1.0000050000069649e-05 >>> expm1(1e-5) # result accurate to full precision 1.0000050000166668e-05
バージョン3.2の新機能。
- math.log(x[, base])
1つの引数を使用して、 x の自然対数を返します(ベース e に)。
2つの引数を使用して、 x の対数を
log(x)/log(base)
として計算された指定のベースに返します。
- math.log1p(x)
- 1 + x (ベース e )の自然対数を返します。 結果は、 x がゼロに近い場合に正確な方法で計算されます。
- math.log2(x)
x の2を底とする対数を返します。 これは通常、
log(x, 2)
よりも正確です。バージョン3.3の新機能。
も参照してください
int.bit_length()は、符号と先行ゼロを除いて、整数を2進数で表すために必要なビット数を返します。
- math.log10(x)
- x の10を底とする対数を返します。 これは通常、
log(x, 10)
よりも正確です。
- math.pow(x, y)
x
をy
の累乗に戻します。 例外的なケースは、可能な限りC99標準の付録「F」に従います。 特に、pow(1.0, x)
とpow(x, 0.0)
は、x
がゼロまたはNaNの場合でも、常に1.0
を返します。x
とy
の両方が有限であり、x
が負であり、y
が整数でない場合、pow(x, y)
は未定義であり、発生します。 ValueError 。組み込みの
**
演算子とは異なり、 math.pow()は両方の引数をタイプ float に変換します。**
または組み込みの pow()関数を使用して、正確な整数の累乗を計算します。
- math.sqrt(x)
- x の平方根を返します。
三角関数
- math.acos(x)
- x のアークコサインをラジアンで返します。 結果は
0
とpi
の間にあります。
- math.asin(x)
- x のアークサインをラジアンで返します。 結果は
-pi/2
とpi/2
の間にあります。
- math.atan(x)
- x のアークタンジェントをラジアンで返します。 結果は
-pi/2
とpi/2
の間にあります。
- math.atan2(y, x)
atan(y / x)
をラジアンで返します。 結果は-pi
とpi
の間にあります。 原点から点(x, y)
までの平面内のベクトルは、正のX軸とこの角度をなします。 atan2()のポイントは、両方の入力の符号がわかっているため、角度の正しい象限を計算できることです。 たとえば、atan(1)
とatan2(1, 1)
はどちらもpi/4
ですが、atan2(-1, -1)
は-3*pi/4
です。
- math.cos(x)
- x ラジアンの余弦を返します。
- math.dist(p, q)
2点 p と q の間のユークリッド距離を返します。それぞれ、座標のシーケンス(または反復可能)として指定されます。 2つのポイントは同じ寸法である必要があります。
ほぼ同等:
sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q)))
バージョン3.8の新機能。
- math.hypot(*coordinates)
ユークリッドノルム
sqrt(sum(x**2 for x in coordinates))
を返します。 これは、原点から座標で指定された点までのベクトルの長さです。2次元の点
(x, y)
の場合、これは、ピタゴラスの定理sqrt(x*x + y*y)
を使用して直角三角形の斜辺を計算することと同じです。バージョン3.8で変更: n次元ポイントのサポートが追加されました。 以前は、2次元の場合のみがサポートされていました。
- math.sin(x)
- x ラジアンの正弦を返します。
- math.tan(x)
- x ラジアンの接線を返します。
角度変換
- math.degrees(x)
- 角度 x をラジアンから度に変換します。
- math.radians(x)
- 角度 x を度からラジアンに変換します。
双曲線関数
双曲線関数は、円ではなく双曲線に基づく三角関数の類似体です。
- math.acosh(x)
- x の逆双曲線コサインを返します。
- math.asinh(x)
- x の逆双曲線正弦を返します。
- math.atanh(x)
- x の逆双曲線正接を返します。
- math.cosh(x)
- x の双曲線コサインを返します。
- math.sinh(x)
- x の双曲線正弦を返します。
- math.tanh(x)
- x の双曲線正接を返します。
特殊機能
- math.erf(x)
エラー関数を x で返します。
erf()関数は、累積標準正規分布などの従来の統計関数を計算するために使用できます。
def phi(x): 'Cumulative distribution function for the standard normal distribution' return (1.0 + erf(x / sqrt(2.0))) / 2.0
バージョン3.2の新機能。
- math.erfc(x)
x で相補誤差関数を返します。 相補誤差関数は
1.0 - erf(x)
として定義されています。 これは、 x の大きな値に使用され、1から減算すると桁落ちが発生します。バージョン3.2の新機能。
- math.gamma(x)
ガンマ関数を x に返します。
バージョン3.2の新機能。
- math.lgamma(x)
x でのガンマ関数の絶対値の自然対数を返します。
バージョン3.2の新機能。
定数
- math.pi
- 数学定数π = 3.141592…、利用可能な精度。
- math.e
- 数学定数 e = 2.718281…、利用可能な精度。
- math.tau
数学定数τ = 6.283185…、利用可能な精度。 タウは、2 πに等しい円定数であり、円の円周とその半径の比率です。 タウの詳細については、ViHartのビデオ Pi is(still)Wrong をチェックし、2倍のパイを食べて Tau day を祝いましょう!
バージョン3.6の新機能。
- math.inf
浮動小数点の正の無限大。 (負の無限大の場合は、
-math.inf
を使用します。)float('inf')
の出力に相当します。バージョン3.5の新機能。
- math.nan
浮動小数点の「数値ではない」(NaN)値。
float('nan')
の出力に相当します。バージョン3.5の新機能。