次序统计
- 计算最小值
numpy.amin(a,[ axis=None, out=None, keepdims=np._NoValue, initial=np._NoValue,where=np._NoValue]) - 计算最大值
numpy.amax(a,[ axis=None, out=None, keepdims=np._NoValue, initial=np._NoValue,where=np._NoValue])
a:array,输入的数组。
axis:默认值为0,限制数组行最小还是列最小
keepdims:保持矩阵维数不变,因为在对axis进行指定轴操作会使矩阵发生降维,使用此参数会使维度保持为1,它的默认值为True.
详情请参照官网解释
keepdims参数
import numpy as np
x=np.arange(20).reshape((4,5))
print(x)
#[[ 0 1 2 3 4]
# [ 5 6 7 8 9]
# [10 11 12 13 14]
# [15 16 17 18 19]]
y=np.amin(x)
print(y)
#0
y=np.amin(x,axis=0)#列最小
print(y)
#[0 1 2 3 4]
y=np.amin(x,axis=1)#行最小
print(y)
#[ 0 5 10 15]
y=np.amax(x)
print(y)
#19
y=np.amax(x,axis=0)
print(y)
#[15 16 17 18 19]
y=np.amax(x,axis=1)
print(y)
#[ 4 9 14 19]
nanmin()和ninmax()函数:返回一个忽略任一个nan的数组中的最小值或沿某轴的最小值
- 计算极差
极差:极差又称范围误差或全距(Range),以R表示,是用来表示统计资料中的变异量数(measures of variation),其最大值与最小值之间的差距,即最大值减最小值后所得之数据。(来自百度词条)
numpy.ptp(a, axis=None, out=None, keepdims=np._NoValue)
import numpy as np
np.random.seed(20201127)
x=np.random.randint(0,10,size=[4,5])#用0~10的数随机生成4*5的数组
print(x)
print(np.ptp(x))
print(np.ptp(x,axis=0))#列
print(np.ptp(x,axis=1))#行
#[[2 2 0 9 5]
# [5 7 0 1 3]
# [9 5 0 7 1]
# [8 7 2 1 4]]
#9
#[7 5 2 8 4]
#[9 7 9 7]
- 计算分位数
分位数:分位数(Quantile),亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。(来自百度词条)常见的有二分位,四分位,百分位。
numpy.percentile(a, q, axis=None, out=None, overwrite_input=False, interpolation=‘linear’, keepdims=False)
a:array,用来算分位数的对象,可以是多维的数组。
q:介于0-100的float,用来计算是几分位的参数,如四分之一位就是25,如要算两个位置的数就[25,75]。
axis:坐标轴的方向,一维的就不用考虑了,多维的就用这个调整计算的维度方向,取值范围0/1。
mport numpy as np
np.random.seed(20201127)
x=np.random.randint(0,10,size=[4,5])
print(x)
#[[2 2 0 9 5]
# [5 7 0 1 3]
# [9 5 0 7 1]
# [8 7 2 1 4]]
print(np.percentile(x,[25,50]))
print(np.percentile(x,[25,50],axis=0))
print(np.percentile(x,[50,75],axis=1))
#[1. 3.5]
#[[4.25 4.25 0. 1. 2.5 ]
# [6.5 6. 0. 4. 3.5 ]]
#[[2. 3. 5. 4.]
# [5. 5. 7. 7.]]
计算分位数可以参考官网的相关函数
百分位计算
均值与方差
- 计算中位数
numpy.median(a, axis=None, out=None, overwrite_input=False, keepdims=False)
out:输出数据的存放对象,参数要与预期输出有相同的形状和缓冲区长度
overwrite_input=False:bool值,默认False,为True时,直接在数组内存计算,计算后原数组无法保存
参考官方文档:
统计相关参数 - 计算平均值
numpy.mean(a[, axis=None, dtype=None, out=None, keepdims=np._NoValue)]) - 加权平均值
numpy.average(a[, axis=None, weights=None, returned=False])
import numpy as np
np.random.seed(20201127)
x=np.random.randint(0,10,size=[4,5])
print(x)
#[[2 2 0 9 5]
# [5 7 0 1 3]
# [9 5 0 7 1]
# [8 7 2 1 4]]
print(np.percentile(x,50))
print(np.median(x))
print(np.percentile(x,50,axis=0))
print(np.median(x,axis=0))
print(np.median(x,axis=0,overwrite_input=False))#基本上没有什么影响
#3.5
#3.5
#[6.5 6. 0. 4. 3.5]
#[6.5 6. 0. 4. 3.5]
#[6.5 6. 0. 4. 3.5]
y=np.mean(x)#计算平均值
print(y)
y=np.mean(x,axis=0)#axis的操作同上,以下的函数中我只介绍一种情况
print(y)
#3.9
#[6. 5.25 0.5 4.5 3.25]
y=np.average(x)#计算加权平均值
print(y)
y=np.average(x,axis=0)
print(y)
#3.9
#[6. 5.25 0.5 4.5 3.25]
z=np.average(x,weights=x)
print(z)
z=np.average(x,axis=0,weights=x)
print(z)
#6.256410256410256
#[7.25 6.04761905 2. 7.33333333 3.92307692]
- 计算方差
numpy.var(a[, axis=None, dtype=None, out=None, ddof=0, keepdims=np._NoValue])
ddof:表示自由度个数,减小样本偏差
import numpy as np
np.random.seed(20201127)
x=np.random.randint(0,10,size=[4,5])
print(x)
#[[2 2 0 9 5]
# [5 7 0 1 3]
# [9 5 0 7 1]
# [8 7 2 1 4]]
y=np.var(x)
print(y)
y=np.mean((x-np.mean(x))**2)
print(y)
y=np.var(x,ddof=1)
print(y)
y=np.sum((x-np.mean(x))**2)/(x.size-1)#方差计算公式
print(y)
y=np.var(x,axis=0)
print(y)
#9.190000000000001
#9.190000000000001
#9.673684210526316
#9.673684210526316
#[ 7.5 4.1875 0.75 12.75 2.1875]
- 计算标准差
标准差:标准差是一组数据平均值分散程度的一种度量,是方差的算术平方根。
numpy.std(a[, axis=None, dtype=None, out=None, ddof=0, keepdims=np._NoValue])
import numpy as np
np.random.seed(20201127)
x=np.random.randint(0,10,size=[4,5])
print(x)
#[[2 2 0 9 5]
# [5 7 0 1 3]
# [9 5 0 7 1]
# [8 7 2 1 4]]
y=np.std(x)
print(y)
y=np.sqrt(np.var(x))#标准差计算公式,方差的平方
print(y)
y=np.std(x,axis=0)
print(y)
#3.031501278244824
#3.031501278244824
#[2.73861279 2.04633819 0.8660254 3.57071421 1.47901995]
相关
- 计算协方差矩阵
协方差矩阵:在统计学与概率论中,协方差矩阵的每个元素是各个向量元素之间的协方差,是从标量随机变量到高维度随机向量的自然推广。(来自百度词条)反映随机变量的分散程度。
numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None,aweights=None)
cov()函数描述的是两个向量协同变化的程度,它的取值可能非常大,也可能非常小,这就导致没法直观地衡量二者协同变化的程度。相关系数实际上是正则化的协方差, n 个变量的相关系数形成一个 n 维方阵。
import numpy as np
x=np.arange(6)
y=np.random.randint(0,10,size=6)
print(np.cov(x))#样本方差
print(np.cov(y))
print(np.cov(x,y))
#3.5
#16.0
#[[ 3.5 1.6]
# [ 1.6 16. ]]
print(np.var(x))
print(np.var(x,ddof=1))#样本方差
#2.9166666666666665
#3.5
print(np.var(y))
print(np.var(y,ddof=1))
#13.333333333333334
#16.0
z=np.mean((x-np.mean(x))*(y-np.mean(y)))#协方差
print(z)
z=np.mean((x-np.mean(x))*(y-np.mean(y)))/(len(x)-1)#样本协方差
print(z)
z=np.dot(x-np.mean(x),y-np.mean(y))/(len(x)-1)#样本协方差
print(z)
#1.3333333333333333
#0.26666666666666666
#1.6
- 计算相关系数
numpy.corrcoef(x, y=None, rowvar=True, bias=np._NoValue, ddof=np._NoValue)
import numpy as np
x=np.arange(6)
y=np.random.randint(0,10,size=6)
z=np.corrcoef(x,y)
print(z)
a=np.dot(x-np.mean(x), y-np.mean(y))
b=np.sqrt(np.dot(x-np.mean(x),x-np.mean(x)))
c=np.sqrt(np.dot(y-np.mean(y),y-np.mean(y)))
print(a/(b*c))
#[[1. 0.24951808]
# [0.24951808 1. ]]
#0.24951807530747172
直方图
numpy.digitize(x, bins, right=False)
x:numpy数组
bins:一维单调数组,必须是升序或者降序
right:间隔是否包含最右
返回值:x在bins中的位置。
import numpy as np
x=np.arange(6)#注意数组必须是单调数组
bins=np.arange(1,7)
inds=np.digitize(x,bins)
print(inds)
for n in range(x.size):
print(bins[inds[n]-1],"<=",x[n],"<",bins[inds[n]])
#[0 1 2 3 4 5]
#6 <= 0 < 1
#1 <= 1 < 2
#2 <= 2 < 3
#3 <= 3 < 4
#4 <= 4 < 5
#5 <= 5 < 6
今天与统计相关的知识点就介绍到这里了
功不在戾,但求有恒!
加油!!