9. 数值模块

9.1. numbers

定义了数字抽象基类的层次结构,在这个模块中定义的任何类型都不能实例化。

9.2. math

这个模块提供了数学函数功能。

# 导入
In [1]: import math
##################基础的####################################
# 向上取整数
In [2]: math.ceil(4.3)
Out[2]: 5

# 向下取整
In [3]: math.floor(4.3)
Out[3]: 4

# 绝对值
In [4]: math.fabs(-4.3)
Out[4]: 4.3

# 获取数值的整数部分
In [16]: math.trunc(4.3)
Out[16]: 4

# 余数
In [5]: math.fmod(9,4)
Out[5]: 1.0

# 求和,有浮点误差的
In [6]:  sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
...:
Out[6]: 0.9999999999999999

# 使用math.fsum没有误差
In [8]: math.fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
...:
...:
Out[8]: 1.0

# 求解最大公约数
In [9]: math.gcd(4,6)
Out[9]: 2

In [10]: math.isfinite(-4.2)
Out[10]: True

# 判定是不是非inf结果
In [12]: math.isfinite(math.inf)
Out[12]: False

In [13]: math.isnan(math.inf)
Out[13]: False
##################次方和求对数的##########################
# e^4
In [17]: math.exp(4)
Out[17]: 54.598150033144236
# e^ - 1
In [18]: math.expm1(4)
Out[18]: 53.598150033144236

# log(2)/log(4)
In [19]: math.log(2,4)
Out[19]: 0.5

# log(9)/log(3)
In [20]: math.log(9,3)
Out[20]: 2.0

# log(x+1)
In [24]: math.log1p(math.e-1)
Out[24]: 1.0

# 以2为基数
In [25]: math.log2(4)
Out[25]: 2.0

# 以10为基数
In [26]: math.log10(10)
Out[26]: 1.0

# 求解次方
In [27]: math.pow(2,5)
Out[27]: 32.0

# 平方
In [28]: math.sqrt(100)
Out[28]: 10.0

##################三角函数##########################
# cos函数,当然还有其他的sin,tan,acos,asin等
In [34]: math.cos(math.pi)
Out[34]: -1.0
# sqrt(x^2 + y^2)
In [37]: math.hypot(3,4)
Out[37]: 5.0
##################角度和弧度转换##########################
# 弧度转化为角度
In [39]: math.degrees(math.pi)
Out[39]: 180.0
# 角度转化为弧度,360转化为2pi
In [40]: math.radians(360)
Out[40]: 6.283185307179586

##################常量##########################
In [41]: math.pi
Out[41]: 3.141592653589793

In [42]: math.e
Out[42]: 2.718281828459045

In [43]: math.tau
Out[43]: 6.283185307179586

In [46]: math.pi * 2 == math.tau
Out[46]: True

In [44]: math.inf
Out[44]: inf

In [45]: math.nan
Out[45]: nan

9.3. cmath

复数函数,用户和math基本相同

9.4. decimal

decimal提供高精度运算的

Note

有些数据库使用的所谓number,float类型都是decimal高精度的。

In [53]: from decimal import *

In [54]: getcontext().prec=6

In [55]: Decimal(1)/Decimal(7)
Out[55]: Decimal('0.142857')

In [56]: getcontext().prec=2

In [57]: Decimal(1)/Decimal(7)
Out[57]: Decimal('0.14')

In [58]: getcontext()
Out[58]: Context(prec=2, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[Inexact, Rounded], traps=[InvalidOperation, DivisionByZero, Overflow])

# float转decimal
In [59]: Decimal.from_float(1.0)
Out[59]: Decimal('1')

# 判断是不是0
In [60]: Decimal(0.00000).is_zero()
Out[60]: True

9.5. fractions

分数

In [62]: from fractions import Fraction

In [63]: Fraction(0.5)
Out[63]: Fraction(1, 2)

In [64]: Fraction(2.25)
Out[64]: Fraction(9, 4)

In [65]: from decimal import Decimal

In [66]: Fraction(Decimal('1.1'))
Out[66]: Fraction(11, 10)

9.6. random

提供随机数功能

# 导入
In [67]: import random

# 得到0-1随机数
In [70]: random.random()
Out[70]: 0.021402576679810603

# 指定范文的随机数
In [71]: random.uniform(2,2.1)
Out[71]: 2.0343718601184664

# 整数随机值,0-9
In [72]: random.randrange(9)
Out[72]: 6

# 1,3,5,7,9这些数值取随机值
In [73]: random.randrange(1,11,2)
Out[73]: 5

# 从集合中取一个
In [75]: random.choice([1,2,3])
Out[75]: 1

# 从集合中取样本数据
In [76]: random.sample("abcdef",k=3)
Out[76]: ['e', 'a', 'f']

# 另一个取样本的方法,不能超过样本个数
In [18]: import random

In [19]: import string

In [21]: random.sample(string.digits,k=8)
Out[21]: ['0', '5', '7', '6', '4', '1', '2', '3']

9.7. statistics

统计功能

# 导入
In [79]: import statistics

In [80]: a=[1,2,3,4]

# 均值
In [82]: statistics.mean(a)
Out[82]: 2.5

# 中值,就是这4个数中间的那一个,如果偶数个,就去中间2个平均数,奇数取中间值
In [83]: statistics.median(a)
Out[83]: 2.5

In [84]: b=[1,2,3,4,5]

In [85]: b=[1,4,2,0,100]

In [86]: statistics.median(b)
Out[86]: 2

# 取中间2个小的那个
In [87]: statistics.median_low(a)
Out[87]: 2

# 取中间大的那个
In [88]: statistics.median_high(a)
Out[88]: 3

# 标准差
In [90]: statistics.stdev(a)
Out[90]: 1.2909944487358056