Python中有三种数字类型:int
、float
、complex
变量定义:
x = 10 # int类型
y = 2.2 # float类型
z = 1 + 2j # complex类型
type()
函数用来查看对象的类型。
x = 10 # int类型
y = 2.2 # float类型
z = 1 + 2j # complex类型
print(type(x))
print(type(y))
print(type(z))
# 结果:
#
#
#
可以使用int()
、float()
、complex()
函数从一种类型转换为另一种类型:
x = 10 # int类型
y = 2.2 # float类型
z = 1 + 2j # complex类型
a = float(x)
b = complex(y)
c = int(y)
print(a, type(a))
print(b, type(b))
print(c, type(c))
# 结果:
# 10.0
# (2.2+0j)
# 2
complex
类型不能通过int()
和float()
函数转换为int
类型和float()
类型。random
随机数函数random()
返回[0.0, 1.0)
范围内的下一个随机浮点数。
import random
n = random.random()
print(n)
# 结果:0.4276161736172195
uniform(a, b)
返回一个随机浮点数N
,当a <= b
时a <= N <= b
,当b < a
时b <= N <= a
。
import random
m = random.uniform(1, 2)
print(m)
# 结果:1.4863027623849199
round(number, ndigits=None)
函数返回number
舍入到小数点后ndigits
位精度的值。 如果 ndigits
被省略或为None
,则返回最接近输入值的整数。
对于支持round()
方法的内置类型,结果值会舍入至最接近的10
的负ndigits
次幂的倍数;如果与两个倍数同样接近,则选用偶数。因此,round(0.5)
和round(-0.5)
均得出 0 而round(1.5)
则为2
。ndigits
可为任意整数值(正数、零或负数)。如果省略了ndigits
或为None
,则返回值将为整数。否则返回值与number
的类型相同。
对于一般的Python
对象number
, round
将委托给number.__round__
。
m = 3.1415926
print(round(m))
print(round(m, 3))
# 结果:
# 3
# 3.142
对浮点数执行round()
的行为可能会令人惊讶:例如,round(2.675, 2)
将给出2.67
而不是期望的2.68
。 这不算是程序错误:这一结果是由于大多数十进制小数实际上都不能以浮点数精确地表示。
math
数学函数ceil(x)
返回x
的向上取整,即大于或等于x
的最小的整数。
from math import ceil
n = ceil(5.2)
m = ceil(5.6)
print(n, m)
# 结果:6 6
floor(x)
返回x
的向下取整,小于或等于x
的最大整数。
from math import floor
n = floor(5.2)
m = floor(5.6)
print(n, m)
# 结果:5 5
fabs(x)
返回x
的绝对值。
from math import fabs
n = fabs(-5)
print(n)
# 结果:5.0
gcd(*integers)
返回给定的整数参数的最大公约数。 如果有一个参数非零,则返回值将是能同时整除所有参数的最大正整数。 如果所有参数为零,则返回值为0
。 不带参数的gcd()
返回0
。
from math import gcd
n = gcd(24, 36)
m = gcd(64, 84, 96)
print(n, m)
# 结果:12 4
lcm(*integers)
返回给定的整数参数的最小公倍数。 如果所有参数均非零,则返回值将是为所有参数的整数倍的最小正整数。 如果参数之一为零,则返回值为0
。 不带参数的lcm()
返回1
。
from math import lcm
n = lcm(9, 12)
print(n)
# 结果:36
isqrt(n)
返回非负整数n
的整数平方根。 这就是对n
的实际平方根向下取整,或者相当于使得a² ≤ n
的最大整数a
。
from math import isqrt
n = isqrt(9)
print(n)
# 结果:3
modf(x)
返回x
的小数和整数部分。两个结果都带有x
的符号并且是浮点数。
from math import modf
n = modf(5.6)
print(n)
# 结果:(0.5999999999999996, 5.0)
结果小数部分为0.5999999999999996
,而非0.6
,是因为浮点数运算存在不确定尾数。
trunc(x)
返回去除小数部分的x
,只留下整数部分。trunc()
对于正的x
相当于floor()
,对于负的x
相当于ceil()
。
from math import trunc
n = trunc(6.6)
print(n)
# 结果:6
cbrt(x)
返回x
的立方根。
from math import cbrt
n = cbrt(8)
print(n)
# 结果:2.0
exp(x)
返回e
的x
次方,其中e = 2.718281...
是自然对数的基数。
from math import exp
n = exp(1)
m = exp(0)
print(n, m)
# 结果:2.718281828459045 1.0
exp2(x)
返回2
的x
次方。
from math import exp2
n = exp2(1)
m = exp2(0)
print(n, m)
# 结果:2.0 1.0
expm1(x)
返回e
的x
次方减1。这里 e 是自然对数的基数。
from math import expm1
n = expm1(1)
m = expm1(0)
print(n, m)
# 结果:1.718281828459045 0.0
log(x[,base])
使用一个参数,返回x
的自然对数(底为e
)。
使用两个参数,返回给定的base
的对数x
,计算为 log(x)/log(base)
。
from math import log
n = log(1)
m = log(8, 2)
print(n, m)
# 结果:0.0 3.0
log2(x)
返回x
以2
为底的对数。这通常比log(x,2)
更准确。
from math import log2
n = log2(8)
print(n)
# 结果:3.0
log10(x)
返回x
以10
为底的对数。这通常比log(x,10)
更准确。
from math import log10
n = log10(100)
print(n)
# 结果:2.0
pow(x, y)
返回x
的y
次方。
from math import pow
n = pow(2, 3)
print(n)
# 结果:8.0
sqrt(x)
返回x
的平方根。
from math import sqrt
n = sqrt(9)
print(n)
# 结果:3.0
sin(x)
返回x
弧度的正弦值。
from math import sin, pi
n = sin(pi/6)
print(n)
# 结果:0.49999999999999994
pi
为math
模块的常量,pi = π
。
cos(x)
返回x
弧度的余弦值。
from math import cos, pi
n = cos(pi / 3)
print(n)
# 结果:0.5000000000000001
tan(x)
返回x
弧度的正切值。
from math import tan, pi
n = tan(pi/4)
print(n)
# 结果:0.9999999999999999
asin(x)
返回以弧度为单位的x
的反正弦值。 结果范围在-pi/2
到pi/2
之间。
from math import asin
n = asin(0.5)
print(n)
# 结果:0.5235987755982989
# π/6 = 0.5235987755982989
acos(x)
返回以弧度为单位x
的反余弦值。 结果范围在0
到pi
之间,pi =π
。
from math import acos
n = acos(0.5)
print(n)
# 结果:1.0471975511965979
# π/3 = 1.0471975511965977
atan(x)
返回以弧度为单位的x
的反正切值。 结果范围在-pi/2
到pi/2
之间。
from math import atan
n = atan(1)
print(n)
# 结果:0.7853981633974483
# π/4 = 0.7853981633974483
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
。
from math import atan2
n = atan2(1, 1)
print(n)
# 结果:0.7853981633974483
# π/4 = 0.7853981633974483
degrees(x)
将角度x
从弧度转换为度数。
from math import degrees, pi
n = degrees(pi/2)
print(n)
# 结果:90.0
radians(x)
将角度x
从度数转换为弧度。
from math import radians
n = radians(180)
print(n)
# 结果:3.141592653589793
sinh(x)
返回x
的双曲正弦值。
from math import sinh
n = sinh(0)
print(n)
# 结果:0
cosh(x)
返回x
的双曲余弦值。
from math import cosh
n = cosh(0)
print(n)
# 结果:1.0
tanh(x)
返回x
的双曲正切值。
from math import tanh
n = tanh(0)
print(n)
# 结果:0.0
asinh(x)
返回x
的反双曲正弦值。
from math import asinh
n = asinh(1)
print(n)
# 结果:0.881373587019543
acosh(x)
返回x
的反双曲余弦值。
from math import acosh
n = acosh(1)
print(n)
# 结果:0.0
atanh(x)
返回x
的反双曲正切值。
from math import atanh
n = atanh(0)
print(n)
# 结果:0.0
statistics
数学统计函数mean(data)
返回data
的样本算术平均数,形式为序列或迭代器。若data
为空,将会引发StatisticsError
。
from statistics import mean
n = mean([2, 3, 4, 5, 6, 7])
print(n)
# 结果:4.5
fmean(data, weights=None)
将data
转换成浮点数并且计算算术平均数。
此函数的运行速度比mean()
函数快并且它总是返回一个float
。data
可以为序列或可迭代对象。 如果输入数据集为空,则会引发StatisticsError
。
from statistics import fmean
n = fmean([2, 3, 4])
print(n)
# 结果:3.0
支持可选权重weights
。例如,教授通过测验的权重为20%
,家庭作业的权重为20%
,期中考试的权重为30%
,期末考试的权重为30%
来分配课程的成绩:
from statistics import fmean
grades = [85, 92, 83, 91]
weights = [0.20, 0.20, 0.30, 0.30]
n = fmean(grades, weights)
print(n)
# 结果:87.6
如果提供了权重,则权重必须与数据长度相同,否则将引发ValueError
。
geometric_mean(data)
将data
转换成浮点数并且计算几何平均数。
几何平均值使用值的乘积表示data
的中心趋势或典型值(与使用它们的总和的算术平均值相反)。
如果输入数据集为空、包含零或包含负值则将引发StatisticsError
。data
可以是序列或可迭代对象。
from statistics import geometric_mean
data = [54, 24, 36]
n = geometric_mean(data)
print(n)
# 结果:36.000000000000014
harmonic_mean(data, weights=None)
返回包含实数值的序列或可迭代对象data
的调和平均数。 如果weights
被省略或为None
,则会假定权重相等。
调和平均数是数据的倒数的算术平均值mean()
的倒数。 例如,三个数值a
,b
和c
的调和平均数将等于3/(1/a + 1/b + 1/c)
。 如果其中一个值为零,则结果也将为零。
调和平均数是均值的一种,是对数据的中心位置的度量。 它通常适用于求比率和比例(如速度)的均值。
假设一辆车在40km/h
的速度下行驶了10km
,然后又以60km/h
的速度行驶了10 km
。车辆的平均速率是多少?\
from statistics import harmonic_mean
data = [40, 60]
n = harmonic_mean(data)
print(n)
# 结果:48.0
假设一辆汽车以速度40
公里/小时行驶了5
公里,当道路变得畅通后,提速到60
公里/小时行驶了行程中剩余的30 km
。 请问其平均速度是多少?
from statistics import harmonic_mean
data = [40, 60]
weights = [5, 30]
n = harmonic_mean(data, weights)
print(n)
# 结果:56.0
如果data
为空、任意元素小于零,或者加权汇总值不为正数则会引发StatisticsError
。
median(data)
使用普通的“取中间两数平均值”方法返回数值数据的中位数(中间值)。 如果data
为空,则将引发StatisticsError
。 data 可以是序列或可迭代对象。
中位数是衡量中间位置的可靠方式,并且较少受到极端值的影响。 当数据点的总数为奇数时,将返回中间数据点:
from statistics import median
data = [1, 3, 5]
n = median(data)
print(n)
# 结果:3
当数据点的总数为偶数时,中位数将通过对两个中间值求平均进行插值得出:
from statistics import median
data = [1, 3, 5, 7]
n = median(data)
print(n)
# 结果:4.0
median_low(data)
返回数值数据的低中位数。 如果data
为空则将引发StatisticsError
。 data 可以是序列或可迭代对象。
低中位数一定是数据集的成员。 当数据点总数为奇数时,将返回中间值。 当其为偶数时,将返回两个中间值中较小的那个。
from statistics import median_low
data0 = [1, 3, 5]
data1 = [1, 3, 5, 7]
n = median_low(data0)
m = median_low(data1)
print(n)
print(m)
# 结果:
# 3
# 3
当你的数据是离散的,并且你希望中位数是一个实际数据点而非插值结果时可以使用低中位数。
median_high(data)
返回数据的高中位数。 如果data
为空则将引发StatisticsError
。data
可以是序列或可迭代对象。
高中位数一定是数据集的成员。 当数据点总数为奇数时,将返回中间值。 当其为偶数时,将返回两个中间值中较大的那个。
from statistics import median_high
data0 = [1, 3, 5]
data1 = [1, 3, 5, 7]
n = median_high(data0)
m = median_high(data1)
print(n)
print(m)
# 结果:
# 3
# 5
当你的数据是离散的,并且你希望中位数是一个实际数据点而非插值结果时可以使用高中位数。
median_grouped(data, interval=1)
返回分组的连续数据的中位数,根据第50
个百分点的位置使用插值来计算。 如果data
为空则将引发StatisticsError
。data
可以是序列或可迭代对象。
from statistics import median_grouped
data = [52, 52, 53, 54]
n = median_grouped(data)
print(n)
# 结果:52.5
在下面的示例中,数据已经过舍入,这样每个值都代表数据分类的中间点,例如1
是0.5--1.5
分类的中间点,2
是1.5--2.5
分类的中间点,3
是2.5--3.5
的中间点等待。 根据给定的数据,中间值应落在3.5--4.5
分类之内,并可使用插值法来进行估算:
from statistics import median_grouped
data = [1, 2, 2, 3, 4, 4, 4, 4, 4, 5]
n = median_grouped(data)
print(n)
# 结果:3.7
可选参数interval
表示分类间隔,默认值为1
。 改变分类间隔自然会改变插件结果:
from statistics import median_grouped
data = [1, 3, 3, 5, 7]
n = median_grouped(data, interval=1)
m = median_grouped(data, interval=2)
print(n)
print(m)
# 结果:
# 3.25
# 3.5
mode(data)
从离散或标称的data
返回单个出现最多的数据点。 此众数(如果存在)是最典型的值,并可用来度量中心的位置。
如果存在具有相同频率的多个众数,则返回在 data 中遇到的第一个。 如果想要其中最小或最大的一个,请使用min(multimode(data))
或max(multimode(data))
。 如果输入的data
为空,则会引发StatisticsError
。mode
将假定是离散数据并返回一个单一的值。
from statistics import mode
data = [1, 1, 2, 3, 3, 3, 3, 4]
n = mode(data)
print(n)
# 结果:3
此众数的独特之处在于它是这个包中唯一还可应用于标称(非数字)数据的统计信息:
from statistics import mode
data = ["red", "blue", "blue", "red", "green", "red", "red"]
n = mode(data)
print(n)
# 结果:red
multimode(data)
返回最频繁出现的值的列表,并按它们在data
中首次出现的位置排序。 如果存在多个众数则将返回一个以上的众数,或者如果data
为空则将返回空列表:
from statistics import multimode
data = 'aabbbbccddddeeffffgg'
n = multimode(data)
print(n)
# 结果:['b', 'd', 'f']
pvariance(data, mu=None)
返回非空序列或包含实数值的可迭代对象data
的总体方差。 方差或称相对于均值的二阶距,是对数据变化幅度(延展度或分散度)的度量。 方差值较大表明数据的散布范围较大;方差值较小表明它紧密聚集于均值附近。如果给出了可选的第二个参数mu
,它通常是data
的均值。 它也可以被用来计算相对于一个非均值点的二阶距。 如果该参数省略或为None
(默认值),则会自动进行算术均值的计算。使用此函数可根据所有数值来计算方差。 要根据一个样本来估算方差,通常 variance()
函数是更好的选择。如果data
为空则会引发 StatisticsError。
from statistics import pvariance
data = [0.0, 0.25, 0.25, 1.25, 1.5, 1.75, 2.75, 3.25]
n = pvariance(data)
print(n)
# 结果:1.25
如果你已经计算过数据的平均值,你可以将其作为可选的第二个参数mu
传入以避免重复计算:
from statistics import pvariance, mean
data = [0.0, 0.25, 0.25, 1.25, 1.5, 1.75, 2.75, 3.25]
mu = mean(data)
n = pvariance(data, mu)
print(n)
# 结果:1.25
pstdev(data, mu=None)
返回总体标准差(总体方差的平方根)。 请参阅pvariance()
了解参数和其他细节。
from statistics import pstdev
data = [1.5, 2.5, 2.5, 2.75, 3.25, 4.75]
n = pstdev(data)
print(n)
# 结果:0.986893273527251
variance(data, xbar=None)
返回包含至少两个实数值的可迭代对象data
的样本方差。 方差或称相对于均值的二阶矩,是对数据变化幅度(延展度或分散度)的度量。 方差值较大表明数据的散布范围较大;方差值较小表明它紧密聚集于均值附近。
如果给出了可选的第二个参数xbar
,它应当是data
的均值。 如果该参数省略或为None
(默认值),则会自动进行均值的计算。
当你的数据是总体数据的样本时请使用此函数。 要根据整个总体数据来计算方差,请参见pvariance()
。如果data
包含的值少于两个则会引发StatisticsError
。
from statistics import variance
data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
n = variance(data)
print(n)
# 结果:1.3720238095238095
如果你已经计算过数据的平均值,你可以将其作为可选的第二个参数xbar
传入以避免重复计算:
from statistics import variance, mean
data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
xbar = mean(data)
n = variance(data, xbar)
print(n)
# 结果:1.3720238095238095