Python数学计算宝库:深入了解math库

发表时间: 2024-07-24 08:43

Python 的标准函数“math”提供了许多常用的数学函数,例如三角函数、四舍五入、指数、对数、平方根、总和等,都可以通过 math 标准函数来进行运算下方列出几种 math 模块常用的方法,要使用 math 必须先 import math 模块,或使用 from 的方式,单独 import 特定的模块。

import mathfrom math import sin

pi、math.e

math.pi 使用后会返回 圆周率 的数学常数,math.e 使用后会返回 指数 的数学常数(常数表示固定不变的数字)。

import mathprint(math.pi)    # 3.141592653589793print(math.e)     # 2.718281828459045

ceil(x)

math.ceil(x) 使用后会将小数点后方的数字,无条件进位到整数,以下方的程序为例,圆周率 3.14159 无条件进位后就等于 4(单纯四舍五入可使用内置函数 round,参考:round(x, y))。

import mathpi = math.piprint(math.ceil(pi))   # 4

floor(x)

math.floor(x) 使用后会将小数点后方的数字,无条件舍去到整数,以下方的程序为例,圆周率 3.14159 无条件舍去后就等于 3(单纯四舍五入可使用内置函数 round,参考:round(x, y))。

import mathpi = math.piprint(math.floor(pi))   # 3

copysign(x, y)

math.copysign(x, y) 使用后,会 根据 y 的正负符号,改变「x 绝对值」之后正负值。

import mathprint(math.copysign(10, -5))    # -10print(math.copysign(-10, 9))    # 10print(math.copysign(-10, -3))   # -10

fabs(x)

math.fabs(x) 使用后会 返回 x 的绝对值,计算结果以浮点数 float 格式呈现。

import mathprint(math.fabs(-10))    # 10.0

fmod(x, y)

math.fmod(x, y) 使用后会返回 x 除以 y 的余数,计算结果以浮点数 float 格式呈现,如果要返回整数,可使用 Python 数学计算 x % y 的语法。

import mathprint(math.fmod(7,3))    # 1.0

fsum(iter)

math.fsum(iter) 使用后会 返回串列或 tuple 里的数值加总,计算结果以浮点数 float 格式呈现。

import mathprint(math.fsum([1,2,3,4,5]))   # 15.0print(math.fsum((1,2,3,4,5)))   # 15.0

gcd(x, y)

math.gcd(x, y) 使用后会返回 x 和 y 的最大公约数(同时可以整除 x 和 y 的最大整数)。

import mathprint(math.gcd(18,12))    # 6

pow(x, y)

math.pow(x, y) 会返回 x 的 y 次方,计算结果以浮点数 float 格式呈现(如果需要整数,可参考内置函数 pow(x, y, z))。

import mathprint(math.pow(2, 5))    # 32.0

sqrt(x)

math.sqrt(x) 会返回 x 的平方根,计算结果以浮点数 float 格式呈现。

import mathprint(math.sqrt(16))    # 4.0

factorial(x)

math.factorial(x) 会 返回 x 的阶乘(x!),x 只能使用正整数。

import mathprint(math.factorial(5))   # 120 ( 5x4x3x2x1=120 )

degrees(x)、math.radians(x)

math.degrees(x) 将 x 弧度转换为角度,math.radians(x) 将 x 角度转换为弧度。

import mathprint(math.radians(30))      # 0.5235987755982988print(math.degrees(0.5236))  # 30.0000701530499

sin(x)、math.cos(x)、math.tan(x)

math.sin(x) 返回 x 弧度的正弦值,math.cos(x) 返回 x 弧度的余弦值,math.tan(x) 返回 x 弧度的正切值(1 弧度等于 180 度/π)。

import mathr = math.radians(30)   # 将 30 度转换为弧度print(math.sin(r))     # 0.49999999999999994print(math.cos(r))     # 0.8660254037844387print(math.tan(r))     # 0.5773502691896257

asin(x)、math.acos(x)、math.atan(x)

math.asin(x) 返回 x 弧度的反正弦值,math.acos(x) 返回 x 弧度的反余弦值,math.atan(x) 返回 x 弧度的反正切值(1 弧度等于 180 度/π)。

import mathr = math.radians(30)   # 将 30 度转换为弧度print(math.asin(r))    # 0.5510695830994463print(math.acos(r))    # 1.0197267436954502print(math.atan(r))    # 0.48234790710102493

exp(x)

math.exp(x) 会返回 e 常数的 x 次方。

import mathprint(math.exp(2))    # 7.38905609893065

log(x)、math.log1p(x)、math.log2(x)、math.log10(x)

math.log 相关的模块,可以返回对应的自然对数。

自然对数模块说明math.log(x)返回 x 的自然对数(底为 e)math.log(x, base)返回 log(x)/log(base)math.log1p(x)返回 1+x 的自然对数(底为 e)math.log2(x)返回 x 以 2 为底的自然对数math.log10(x)返回 x 以 10 为底的自然对数

import mathprint(math.log(10))     # 2.302585092994046print(math.log(10,3))   # 2.095903274289385print(math.log1p(10))   # 2.3978952727983707print(math.log2(10))    # 3.321928094887362print(math.log10(10))   # 1.0

isclose(x, y, rel_tol, abs_tol)

math.isclose 可以根据 判断 x 和 y 是否够接近,「够接近」的定义在于 x 和 y 的差异是否大于某个数值,如果够接近就返回 True,否则返回 False。

下面的例子,在没有设定 rel_tol 和 abs_tol 参数的状况下,除非 x 和 y 相等,否则都是「不够接近」。

import mathprint(math.isclose(3.14, 3.14))        # Trueprint(math.isclose(3.14000, 3.14001))  # False

rel_tol 参数定义「相对的接近范围」,公式为 「 x 和 y 的最大值乘以 rel_tol」,下方的例子,10 和 5 的接近范围最大是 10x0.5=5,因此如果 10-4 比 5 大,就会返回 False (不接近),同理,10 和 20 的接近范围最大会是 20x0.5=10,如果 20-9 比 10 大,就会返回 False。

import mathprint(math.isclose(10, 5, rel_tol=0.5))    # Trueprint(math.isclose(10, 4, rel_tol=0.5))    # Falseprint(math.isclose(20, 10, rel_tol=0.5))   # Trueprint(math.isclose(20, 9, rel_tol=0.5))    # False

abs_tol 参数定义「绝对的接近范围」,公式为 「 x-y 的绝对值」,下方的例子,10.4-10=0.4,0.4 小于 abs_tol 定义的 0.5,表示接近,返回 True。

import mathprint(math.isclose(10, 10.4, abs_tol=0.5))   # True  0.4<0.5print(math.isclose(10, 10.6, abs_tol=0.5))   # False 0.6>0.5

isfinite(x)、math.isinf(x)

math.isfinite(x) 和 math.isinf(x) 能判断 x 是否为无限大的数字,返回 True 或 False。

import matha = float('inf')print(math.isfinite(a))   # False  a 是无限大,返回 Falseprint(math.isinf(a))      # True   a 是无限大,返回 true

isnan(x)

math.isnan(x) 能判断 x 是否为 NaN (非数字),返回 True 或 False。

import matha = float('nan')print(math.isnan(a))     # Trueprint(math.isnan(123))   # False