一.numbers模块
numbers模块中定义了各种数字抽象基类,并通过继承形成层次结构.所有这些类型都不能实例化
#层次关系:以下仅列出相应类增加的方法,每个类都还有继承来的方法
数值:class Number(metaclass=ABCMeta)
|
+--复数:class Complex(Number);操作:①向complex的转换 ②.real与.imag ③四则运算(+,-,*,/) ④abs() ⑤.conjugate ⑥==与!=
|
+--实数:class Real(Complex);操作:①向float的转换 ②trunc() ③divmod ④% ⑤比较(<,<=,>,>=)
|
+--有理数:class Rational(Real);操作:①.numerator与.denominator
|
+--整数:class Integral(Rational);操作:①向int的转换 ②位操作(<<,>>,&,^,|,~)
二.随机数random模块
import random
print(random.random()) #(0,1)随机float
print(random.randint(x,y)) #[x,y]随机int
print(random.randrange(x,y)) #[x,y)随机int
print(random.choice(seq) #从seq(list/str/tuple)随机抽取一个元素
print(random.sample(seq,x) #从seq中随机抽取x(<len(seq))给元素构成列表
print(random.uniform(x,y)) #(x,y)随机float
random.shuffle(list) #将list中元素顺序打乱
制作验证码:
import random
def v_code():
code = ''
for i in range(4):
num=random.randint(0,9)
alf=chr(random.randint(65,90))
add=random.choice([num,alf])
code += str(add)
return code
print(v_code())
三.math模块与cmath模块
- math模块提供了许多对float运算的函数
- cmath模块提供了许多对complex运算的函数
参考:https://www.cnblogs.com/bruce0425/p/8322218.html
https://blog.csdn.net/qq_32681043/article/details/103254745
https://blog.csdn.net/chenxy_bwave/article/details/83063599
abs(x):求x的模
#此函数为内建函数
>>> abs(-1)
1
acos(x):求x的反余弦弧度值,返回float
#x取值范围为[-1,1]
acosh(x):求x的反双曲余弦弧度值,返回float
#x取值范围为[1,+∞)
asin(x):求x的反正弦弧度值,返回float
#x取值范围为[-1,1]
asinh(x):求x的反双曲正弦弧度值,返回float
#x取值范围为(-∞,+∞)
atan(x):求x的反正切弧度值,返回float
#对象限不敏感
#x取值范围为(-∞,+∞)
#值域[-math.pi/2, math.pi/2]
atan2(y,x):求y/x的反正切弧度值,返回float
#对象限敏感(x,y的符号均被考虑)
#[-math.pi, math.pi]
>>> math.atan2(1,2)
0.4636476090008061
>>> math.atan2(-1,-2)
-2.677945044588987=math.atan2(1,2)-math.pi
atanh(x):求x的反双曲正切弧度值
#x的取值范围为(-1,1)
ceil(float):向上取整操作,返回int
>>> math.ceil(3.2)
4
copysign(x,y):返回float,绝对值为x的绝对值,正负与y相同
>>> math.copysign(2, -4)
-2.0
>>> math.copysign(2, 4)
2.0
cos(x):求x的余弦弧度值
#x取值范围为(-∞,+∞)
cosh(x):求x的双曲余弦弧度值
#x的取值范围为(-∞,+∞)
degrees(x):将x弧度值转换为角度
e:自然对数
>>> math.e
2.718281828459045
erf(float):返回x处的错误Error函数;返回float
#用来计算传统的统计函数,如累积的标准正态分布
erfc(float):返回x处补充错误函数;返回float
#erfc(float)=1-erf(float)
exp(float):求e的float次幂,返回float
>>> math.exp(3)
20.085536923187668
>>> math.exp(1.11212)
3.040798057863244
expm1(float):求e**float-1,返回float
>>> math.expm1(3)
19.085536923187668
>>> math.expm1(3.14)
22.103866858722185
math.fabs(x):取绝对值
>>> math.fabs(-1)
1
factorial(int):返回int的阶乘
>>> math.factorial(3)
6
floor(float):向下取整操作,返回int
>>> math.floor(3.2)
3
fmod(x,y):x/y取余,返回float
>>> math.fmod(4,2)
0.0
>>> math.fmod(4,5)
4.0n
>>> math.fmod(4,3)
1.0
frexp(float):将float分解为以2为底的尾数和指数,返回元组(m, n),x=m*(2**n)
#(浮点)数值=尾数×底数^指数
>>> math.frexp(3)
(0.75,2) 0.75*(2**2)=3.0
fsum(list/tuple/set/dict):求迭代器中所有值的精确浮点和,返回float
#只能包含int/float/bool
#存在误差
#对dict求的是所有key的精确浮点和
>>> math.fsum([1.1,2.23])
3.33
>>> math.fsum([2.4,4.3])
6.699999999999999
gamma(x):x处的gamma函数(由欧拉第二类积分定义的函数)
gcd(a, b):取a,b的最大公约数,返回int
>>> gcd(2,4)
2
hypot(x,y):求sqrt(x**2+y**2)(毕达哥拉斯定理)
>>> math.hypot(1,2)
2.23606797749979
inf:浮点正无穷相当于float('inf')
>>> math.inf
inf
>>> 1/math.inf
0
>>> 0*math.inf
nan
isclose(a,b,rel_tol=1e-09,abs_tol=0.0):判断两个数是否接近,返回bool
#python3.5开始支持
#实质为进行abs(a-b)<=max(rel_tol*max(abs(a),abs(b)),abs_tol)的判断
#+-inf只被认为接近自己
#rel_tol为相对于输入值大小,"接近"的最大差异;abs_tol为无论输入值大小,"接近"的最大差异
>>> math.isclose(0.99,1,rel_tol=0.2)
True
>>> math.isclose(0.9999999999,0.999999999991)
True
>>> math.isclose(0.99,0)
False
isfinite(x):检查x是否为无穷大
#如果x是有限数字/可转换为有限数字,返回True;如果x是无穷的,返回False
>>> isfinite(5-2)
true
>>> isfinite(0)
true
isinf(x):判断x是否为无穷大
#若x是无穷大,返回True;否则,返回False
>>> math.isinf(1)
False
isnan(x):判断x是否为nan,是则返回True,否则返回False
>>> math.isnan(123)
False
>>> math.isnan(False)
False
>>> math.isnan(True)
False
ldexp(x, i):获得x*(2**i),返回float
#实际上是frexp()的逆过程
>>> math.ldexp(2,3)
16.0
lgamma(x):x处的gamma函数的绝对值的自然对数
log(x,base=e):求x关于base的对数,base默认为e
>>> math.log(math.pi)
1.1447298858494002
>>> math.log(12,3.2)
2.136358096335879
log10(x):求x关于10的对数
>>> math.log10(2.3)
0.8329091229351039
log1p(x):求x+1关于e的对数
>>> math.log1p(3)
1.3862943611198906
log2(x):求x关于2的对数
>>> math.log2(3)
1.584962500721156
modf(x):获得x的小数部分m和整数部分n构成的元组(m,n),均为float
#两个结果的正负均与x相同
#小数部分存在误差
>>> math.modf(2.4)
(0.3999999999999999, 2.0)
nan():浮点非数字(Not A Number),相当于float('nan')
#两个math.nan并不相等
>>> math.nan
nan
>>> math.sqrt(math.nan-3)
nan
pi:圆周率
>>> math.pi
3.141592653589793
pow(x,y):计算x的y次方,返回float
#相当于**运算但是结果为浮点
>>> math.pow(2,3)
8.0
radians(x):求弧度值x对应的角度值,返回float
>>> math.radians(30)
0.5235987755982988
round(float,n):保留值将保留到离上一位更近的一端(四舍六入)
#n控制保留到小数点后几位(默认为整数位)
#n<0时为保留到小数点前abs(n)为
#此函数为内建函数,可直接使用
#如果距两端一样远,python2中保留到离0远的一边,python3中保留到偶数的一边
#即python3遵循银行家舍入法:4舍6入,逢5无后则留双
>>> round(2.3)
2
>>> round(2.5)
2
>>> round(2.6)
3
>>> round(-0.5)
0
>>> round(3.5)
4
>>> round(3.1415926,5)
3.14159
sin(x):求x的正弦弧度值,返回float
#x取值范围为(-∞,+∞)
sinh(x):求x的双曲正弦弧度值,返回float
#x的取值范围为(-∞,+∞)
sqrt(x):开平方,返回float
>>> math.sqrt(4)
2.0
tan(x):求x的正切弧度值
#x的取值范围为(-∞,+∞)
tanh(x):求x的双曲正切弧度值
#x的取值范围为(-∞,+∞)
tau():tau常数
>>> math.tau
6.283185307179586
trunc(float):取整,返回int
>>> trunc(44.3333)
44
cmath模块包含了一些用于复数运算的函数
复数在 Python 中的表达式为C==c.real+c.imag*j
默认返回实部/虚部均为float的complex
c.real±1j不得写为c.real±j
abs(x):求x的模
#此函数为内建函数
acos(x):求x的反余弦弧度值
cmath.acos(2+3j)
#结果:(1.0001435424737972-1.9833870299165355j)
acosh(x):求x的反双曲余弦弧度值
asin(x):求x的反正弦弧度值
asinh(x):求x的反双曲正弦弧度值
atan(x):求x的反正切弧度值
atanh(x):求x的反双曲正切弧度值
complex(a,b):生成具有实部a和虚部b的complex
#为内建函数,可直接使用
complex(1,2)
#结果:(1+2j)
cos(x):求x的余弦弧度值
cosh(x):求x的双曲余弦弧度值
e:自然对数
exp(x):求e的x次幂
cmath.exp(2+3j)
#结果:(-7.315110094901103+1.0427436562359045j)
inf:浮点正无穷
#相当于float('inf')
math.inf
#结果:inf
1/math.inf
#结果:0
0*math.inf
#结果:nan
infj(x):具有零实部和inf虚部的复数
#相当于complex(0.0,float('inf'))
cmath.infj
#结果:infj
isclose(a,b,rel_tol=1e-09,abs_tol=0.0):判断两个数是否接近,返回bool
#实质为进行abs(a-b)<=max(rel_tol*max(abs(a),abs(b)),abs_tol)的判断
#+-inf只被认为接近自己
#rel_tol为相对于输入值大小,"接近"的最大差异;abs_tol为无论输入值大小,"接近"的最大差异
isfinite(x):判断x的实部/虚部是否为inf
#如果实部/虚部至少有一个为inf,返回False;否则返回True
isinf(x):判断x的实部/虚部是否为inf
#如果实部/虚部至少有一个为inf,返回True;否则返回False
isnan(x):判断x的实部/虚部是否为nan
#如果实部/虚部至少一个为nan,返回True;否则返回False
log(x,m=e):求x关于m的对数,m默认为e
cmath.log(3+1j,3+2j)
#结果:(0.8368266466811473-0.13279458487118032j)
log10(x):求x关于10的对数
nan():浮点非数字(Not A Number),相当于float('nan')
#两个cmath.nan并不相等
cmath.nan
#结果:nan
cmath.sqrt(math.nan-3)
#结果:nan
nanj:具有零实部和nan虚部的复数
#相当于complex(0.0,float('nan'))
cmath.nanj:结果:nanj
phase():求x的相位(也称x的参数),返回float???
#相当于math.atan2(x.imag, x.real)
#值域为[-math.pi,math.pi]
pi:圆周率
cmath.pi
#结果:3.141592653589793
polar(z.real+z.imag*1j):求指定complex在极坐标中的表达方式
#相当于(abs(x), phase(x))
cmath.polar(2+1j)
#结果:(2.23606797749979, 0.4636476090008061)
rect(r,phi):求极坐标中坐标为(r,phi)的complex在直角坐标中的表达方式
#相当于r*(math.cos(phi)+math.sin(phi)*1j)
cmath.rect(1,2)
#结果:(-0.4161468365471424+0.9092974268256817j)
sin(x):求x的正弦弧度值,返回float
sinh(x):求x的双曲正弦弧度值,返回float
sqrt(x):开平方,返回float
tan(x):求x的正切弧度值
tanh(x):求x的双曲正切弧度值
tau():tau常数
cmath.tau
#结果:6.283185307179586
四.decimal模块
1.简介
(1)简介:
decimal模块主要用于浮点数的精确表示/计算.其模块设计以十进制数/算术上下文/信号这3个概念为中心
(2)核心概念:
10进制数:10进制数是不可变的,包括1个符号/系数数字(尾随0会被保留)/1个指数.十进制数有一些特殊值,如Infinity/-Infinity/NaN
算术上下文:指定①精度 ②舍入规则 ③指数限制 ④指示操作结果的标志 ⑤确定符号是否被视为异常的陷阱启用器 的环境
信号:在计算过程中出现的异常条件组
2.查看与设置:
查看所有相关信息:decimal.getcontext()
#实例:
>>> decimal.getcontext()
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[InvalidOperation, Inexact, FloatOperation, Rounded], traps=[InvalidOperation, DivisionByZero, Overflow])
######################################################################################################################
查看/设置特定项:decimal.getcontext().<opt>[=<val>]
#参数说明:
opt:指定要设置的项;可选值见上
val:指定设为的值
3.小数类型(Decimal类)
(1)创建对象:
decimal.Decimal([<value>=0])
#参数说明:
value:指定数值;为num(除complex)/str(只能包含数字字符)/tuple/Decimal object
#注意:虽然可以传入float,但不应这么做,因为float传入时就是不精确的
#为tuple时格式为(<sign>,(<co1>,<co2>...),<exp>),结果为<sign><co1><co2>...e<exp>
# 参数说明:
# sign:符号;可为0(正)/1(负)
# co:系数(各个数位上的值;只能为1位的数字)
# exp:指数
#也可为位置参数
#实例:
>>> decimal.Decimal(value=3)
Decimal('3')
>>> decimal.Decimal()
Decimal('0')
>>> decimal.Decimal(1.33)
Decimal('1.3300000000000000710542735760100185871124267578125')
>>> decimal.Decimal('dsd')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
decimal.InvalidOperation: [<class 'decimal.ConversionSyntax'>]
>>> decimal.Decimal('01231')
Decimal('1231')
>>> decimal.Decimal((0,(1,2),3))
Decimal('1.2E+4')
(2)运算:
Decimal object可以完成常规num类型的所有运算(位运算除外)
#实例:
>>> d1=decimal.Decimal(3.14)
>>> d2=decimal.Decimal(43.1212)
>>> d1+d2
Decimal('46.26120000000000187512227967')
>>> d1-d2
Decimal('-39.98120000000000162643232215')
>>> d1*d2
Decimal('135.4005680000000108593454229')
>>> d1/d2
Decimal('0.07281801063050193401057620494')
>>> d1%d2
Decimal('3.140000000000000124344978758')
>>> d1==d2
False
>>> d1>d2
False
>>> d1<d2
True
>>> d1>=d2
False
>>> d1<=d2
True
>>> d1!=d2
True
>>> d1**d2
Decimal('2680419325553858276135.310700')
>>> d1//d2
Decimal('0')
>>> d1 and d2
Decimal('43.1212000000000017507773009128868579864501953125')
>>> d1 or d2
Decimal('3.140000000000000124344978758017532527446746826171875')
>>> not d1
False
(3)方法:
比较大小:[<rd>=]<d>.compare(other=None[,context=decimal.getcontext()])
#参数说明:
d:Decimal对象
other:要进行比较的值;为int(不支持float/bool/complex)/Decimal object
#也可为位置参数
r:返回比较结果;为Decimal object
#如果d>other,返回Decimal('1');d=other,返回Decimal('0');d<other,返回Decimal('1');如果d/other为NaN,返回Decimal('NaN')
#实例:
>>> decimal.Decimal(3.14).compare(other=decimal.Decimal(43.1212))
Decimal('-1')
######################################################################################################################
求绝对值:<d>.copy_abs()
#实例:
>>> decimal.Decimal('-3').copy_abs()
Decimal('3')
>>> decimal.Decimal('7').copy_abs()
Decimal('7')
######################################################################################################################
判断是否为有限正规数:<d>.is_normal([,context=decimal.getcontext()])
#实例:
>>> decimal.Decimal('7').is_normal()
True
######################################################################################################################
判断是否为负数:<d>.is_signed()
#实例:
>>> decimal.Decimal(7.1).is_signed()
False
>>> decimal.Decimal(-7.1).is_signed()
True
######################################################################################################################
判断是否为0:<d>.is_zero()
#实例:
>>> decimal.Decimal('0').is_zero()
True
######################################################################################################################
求自然对数:<d>.ln([,context=decimal.getcontext()])
#实例:
>>> decimal.Decimal(2.7).ln()
Decimal('0.9932517730102834559587383079')
######################################################################################################################
求以10为底的对数:<d>.log10([,context=decimal.getcontext()])
#实例:
>>> decimal.Decimal(100).log10()
Decimal('2')
######################################################################################################################
求较大的值:<d>.max(<other>=None[,context=decimal.getcontext()])
#实例:
>>> decimal.Decimal(7.1).max(decimal.Decimal(8.2))
Decimal('8.199999999999999289457264240')
######################################################################################################################
求绝对值较大的值:<d>.max(<other>=None[,context=decimal.getcontext()])
#实例:
>>> decimal.Decimal(7.1).max_mag(-100)
Decimal('-100')
######################################################################################################################
求较小的值:<d>.min(<other>=None[,context=decimal.getcontext()])
#实例:
>>> decimal.Decimal(7.1).min(3)
Decimal('3')
######################################################################################################################
求绝对值较小的值:<d>.min_mag(<other>=None[,context=decimal.getcontext()])
#实例:
>>> decimal.Decimal(7.1).min_mag(-3)
Decimal('-3')
######################################################################################################################
进行舍入:<d>.quantize(exp=None[,rounding=context.rounding,context=decimal.getcontext()])
#遵循四舍五入
#参数说明:
exp:指定保留到小数点后几位
rounding:
#也可为位置参数
#实例:
>>> d=decimal.Decimal((0,(2,3,1,4,3),-6))
>>> d
Decimal('0.023143')
>>> d.quantize(exp=decimal.Decimal((0,(2,3,1,4,3),-2)))
Decimal('0.02')
五.fractions模块
1.简介
(1)简介:
fractions模块提供了分数类型的支持
(2)导入:
import fractions
2.分数类型(Fraction类):
fractions.Fraction([numerator=0,denominator=1])
#参数说明:
numerator:指定分子;为int/numbers.Rational
denominator:指定分母;为int/numbers.Rational
#二者的数据类型必须相同;均可为位置参数;denominator不能为0
#实例:
>>> f=fractions.Fraction(1,2)
>>> f+f
Fraction(1, 1)
六.statistics模块
1.简介:
该模块提供了一些基础的统计函数.除非有特别说明,这些函数都支持int/float/Decimal/Fraction构成的数据集;不支持使用其他类型数据;使用混
合类型的数据集则是未定义的行为
2.方法
(1)求均值:
求算术平均值:[<m>=]statistics.mean(<data>)
快速求float的算术平均值:[<fm>=]statistics.fmean(<data>)
#如果数据不为float,则会先转换为float再计算;速度比statistics.mean()要快
#参数说明:
data:指定数据集;为iterable object/sequence
#注意:不能为空
m,fm:返回求得的算术平均值
#<fm>总为float,<m>则取决于具体的结果
#实例:
>>> statistics.mean([1,2,3,4,56,6,7,8])
10.875
>>> statistics.fmean([1,2,3,4,56,6,7,8])
10.875
>>> statistics.mean([])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\statistics.py", line 315, in mean
raise StatisticsError('mean requires at least one data point')
statistics.StatisticsError: mean requires at least one data point
######################################################################################################################
求几何平均值:statistics.geometric_mean(<data>)
#参数说明:
data:指定数据集;为iterable object/sequence
#注意:不能为空,不能包含负值/0
#实例:
>>> statistics.geometric_mean([1,2,4,6,5,7,4])
3.521819055860027
>>> statistics.geometric_mean([1,2,3,0])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\statistics.py", line 363, in geometric_mean
raise StatisticsError('geometric mean requires a non-empty dataset '
statistics.StatisticsError: geometric mean requires a non-empty dataset containing positive numbers
######################################################################################################################
求调和平均值:statistics.harmonic_mean(<data>)
#参数说明:
data:指定数据集;为iterable object/sequence
#注意:不能为空,不能包含负值
#实例:
>>> statistics.harmonic_mean([3.14,1.414,1.728])
1.8698711540373794
>>> statistics.harmonic_mean([3.14,1.414,1.728,0.000])
0
(2)求中位数:
求离散数据的中位数:statistics.median(<data>)
#当中位数介于2数(记为a<b)之间时,返回(a+b)/2
求离散数据的低中位数:statistics.median_low(<data>)
#当中位数介于2数(记为a<b)之间时,返回a
求离散数据的高中位数:statistics.median_high(<data>)
#当中位数介于2数(记为a<b)之间时,返回b
#参数说明:
data:指定数据集;为iterable object/sequence
#注意:不能为空
#实例:
>>> statistics.median([1,2,3,4])
2.5
>>> statistics.median_low([1,2,3,4])
2
>>> statistics.median_high([1,2,3,4])
3
######################################################################################################################
?求分组连续数据的中位数:statistics.median_grouped(<data>[,interval=1])
#参数说明:
data:指定数据集;为iterable object/sequence
#注意:不能为空
intervals:指定组距;为float
#注意:函数不会检查数据点间是否至少相隔interval
#实例:
>>> statistics.median_grouped([1,4,7,11])
6.5
>>> statistics.median_grouped([1,4,7,11],2.22)
5.89
(3)求众数:
求单个众数:[<m>=]statistics.mode(<data>)
#如果有多个众数,就返回第1个
#参数说明:
data:指定数据集;为iterable object/sequence
#注意:不能为空
m:返回众数
#实例:
>>> statistics.mode([1,1,2,2,2,3,4,5,5,5])
2
>>> statistics.mode([])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\statistics.py", line 562, in mode
raise StatisticsError('no mode for empty data') from None
statistics.StatisticsError: no mode for empty data
######################################################################################################################
求多个众数:[<ml>=]statistics.multimode(<data>)
#如果有多个众数,就返回多个
#参数说明:
data:指定数据集;为iterable object/sequence
ml:返回众数构成的list;为list
#实例:
>>> statistics.multimode([1,1,2,2,2,3,4,5,5,5])
[2, 5]
>>> statistics.multimode([])
[]
>>> statistics.multimode([1,1,1,1,2])
[1]
(4)求标准差:
求总体标准差:statistics.pstdev(<data>[,mu=None])
求样本标准差:statistics.stdev(<data>[,xbar=None])
#参数说明:
data:指定数据集;为iterable object/sequence
#注意:对statistics.pstdev(),不能为空;对statistics.stdev(),应至少包含2个元素
mu,xbar:指定<data>的均值;为float,None表示由函数计算
#实际上statistics.pstdev()计算的是相对于某点的2阶中心矩,故mu通常为<data>的均值,但也可以不是
#实例:
>>> statistics.pstdev([1,2,3,7,3,4,1,4,-4,3,1])
2.596883064924673
>>> statistics.pstdev([1,2,3,7,3,4,1,4,-4,3,1],statistics.mean([1,2,3,7,3,4,1,4,-4,3,1]))
2.596883064924673
>>> statistics.pstdev([1,2,3,7,3,4,1,4,-4,3,1],111)
108.75828077145958
>>> statistics.stdev([1,2,3,7,3,4,1,4,-4,3,1])
2.7236339361562187
>>> statistics.stdev([1,2,3,7,3,4,1,4,-4,3,1],statistics.mean([1,2,3,7,3,4,1,4,-4,3,1]))
2.7236339361562187
>>> statistics.stdev([1,2,3,7,3,4,1,4,-4,3,1],111)
114.06664718488048
(5)求方程:
求总体方差:statistics.pvariance(<data>[,mu=None])
求样本方差:statistics.variance(<data>[,xbar=None])
(6)划分数据集:
进行等可能的划分:[<ql>=]statistics.quantiles(<data>[,n=4,method="exclusive"])
#划分而来的每个区间中数据点的个数都相等
#参数说明:
data:指定数据集;为iterable object/sequence
#要求len(<data>)>min(n-1,2)
n:指定要划分为几个数据集;为int>1
ql:返回划分而来的各个区间的边界;为list
#实例:
>>> statistics.quantiles([1,3,2,4,2,5,3,56,4,64,2,4],n=3)
[2.3333333333333335, 4.0]
>>> statistics.quantiles([1,3,2],n=3)
[1.3333333333333333, 2.6666666666666665]
3.正态分布(statistics.NormalDist类)
(1)创建:
[<nd>=]statistics.NormalDist([mu=0.0,sigma=1.0])
#参数说明:
mu,sigma:分别指定期望与标准差;均为float(要求sigma≥0)
nd:返回创建的正态分布
#实例:
>>> nd=statistics.NormalDist(3,2)
>>> nd
NormalDist(mu=3.0, sigma=2.0)
(2)运算:
statistics.NormalDist支持加/减/数乘/数除,这些运算用于转换和缩放:
>>> nd+nd
NormalDist(mu=6.0, sigma=2.8284271247461903)
>>> nd-nd
NormalDist(mu=0.0, sigma=2.8284271247461903)
>>> nd*2
NormalDist(mu=6.0, sigma=4.0)
>>> 2*nd
NormalDist(mu=6.0, sigma=4.0)
>>> nd/2
NormalDist(mu=1.5, sigma=1.0)
(3)属性:
>>> nd.mean#算术平均值
3.0
>>> nd.median#中位数
3.0
>>> nd.mode#众数
3.0
>>> nd.stdev#标准差
2.0
>>> nd.variance#方差
4.0
(4)方法:
创建正态分布:<nd>.from_samples(<data>)
#根据<data>得到mu/sigma,从而创建1个新的正态分布
#参数说明:
data:指定数据集;为iterable object/sequence(要求至少包含2个元素)
#实例:接上
>>> nd.from_samples([3,4,1,3])
NormalDist(mu=2.75, sigma=1.2583057392117916)
######################################################################################################################
生成正态分布的随机样本:[<sl>=]<nd>.samples(<n>[,seed=None])
#参数说明:
n:指定要生成几个样本;为int
sl:返回样本;为float list
#实例:接上
>>> nd.samples(15)
[3.075431911622098, 1.723175634476604, 3.216184211223195, 2.693038098796163, 0.29723526115688115, 2.46326767571093, 2.6166156346437712, 0.69485636531721, 3.363588098562728, 2.265995485456955, 2.7341083220036033, -0.3987358428829446, 1.8773715509367663, 1.015609706857037, 3.290498260103023]
######################################################################################################################
求指定位置处的概率密度:<nd>.pdf(<x>)
#参数说明:
x:指定位置;为float
#实例:接上
>>> nd.pdf(3)
0.19947114020071635#=1/(math.sqrt(2*math.pi)*2)
######################################################################################################################
求指定位置处分布函数的值:<nd>.cdf(<x>)
#实例:接上
>>> nd.cdf(3)
0.5
######################################################################################################################
求指定位置处分布函数的反函数的值:<nd>.inv_cdf(<p>)
#即求x使得P(X<=x)=p
#参数说明:
p:指定位置(为1个概率);为0<float<1
#实例:接上
>>> nd.cdf(1.7)
0.2578461108058647
>>> nd.inv_cdf(0.2578461108058647)
1.7
######################################################################################################################
测量2个正态概率分布之间的一致性:[<r>=]<nd>.overlap(<other>)
#2个正态分布重合越多,一致性越高
#参数说明:
other:指定另1个正态分布;为statistics.NormalDist
#注意:2个正态分布的sigma都不能为0
r:返回结果;为0(完全不同)≤float≤1(完全一致)
#实例:接上
>>> nd.overlap(nd)
1.0
>>> nd.overlap(statistics.NormalDist(7,100))
0.049732674863020576
######################################################################################################################
进行等可能的划分:[<ql>=]<nd>.quantiles([n=4])
#划分而来的每个区间都具有相等的概率
#参数说明:同 2.(5) 部分
#实例:接上
>>> nd.quantiles()
[1.6510204996078366, 3.0, 4.348979500392163]