次序统计
计算最大值最小值
numpy.amin() 和 numpy.amax()
numpy.amin() 用于计算数组中的元素沿指定轴的最小值。
- numpy.amin(a[, axis=None, out=None, keepdims=np._NoValue, initial=np._NoValue,
where=np._NoValue])
numpy.amax() 用于计算数组中的元素沿指定轴的最大值。
- numpy.amax(a[, axis=None, out=None, keepdims=np._NoValue, initial=np._NoValue,
where=np._NoValue])
import numpy as np
a = np.random.randint(5,50,[5,5])
print(a)
print(np.amin(a)) #矩阵a的最小值
print (np.amin(a, axis = 0)) #矩阵a每列的最小值
print (np.amin(a, axis = 1)) #矩阵a每行的最小值
print (np.amax(a))
print (np.amax(a, axis = 0))
print (np.amax(a, axis = 1))
'''
[[16 9 29 32 17]
[39 14 19 37 41]
[36 43 12 43 33]
[ 9 21 45 38 49]
[30 6 16 18 45]]
6
[ 9 6 12 18 17]
[ 9 14 12 9 6]
49
[39 43 45 43 49]
[32 41 43 49 45]
'''
计算极差
numpy.ptp()
numpy.ptp()函数计算数组中元素最大值与最小值的差(最大值 - 最小值)。
- numpy.ptp(a, axis=None, out=None, keepdims=np._NoValue)
import numpy as np
np.random.seed(20201126)
a = np.random.randint(0,20,[3,5])
print(a)
print(np.ptp(a)) #矩阵a的极差
print(np.ptp(a,axis = 0)) #矩阵a每列的极差
print(np.ptp(a,axis = 1)) #矩阵a每行的极差
'''
[[ 5 16 4 6 6]
[ 8 4 6 0 15]
[18 18 15 19 5]]
19
[13 14 11 19 10]
[12 15 14]
'''
计算分位数
numpy.percentile()
百分位数是统计中使用的度量,表示小于这个值的观察值的百分比。 函数numpy.percentile()接受以下参数。
- numpy.percentile(a, q, axis)
a:array,用来算分位数的对象,可以是多维的数组。
q:介于0-100的float,用来计算是几分位的参数,如四分之一位就是25,如要算两个位置
的数就[25,75]。
axis:坐标轴的方向,一维的就不用考虑了,多维的就用这个调整计算的维度方向,取值范
围0/1。
import numpy as np
a = np.random.randint(0,20,[3,3])
print(a)
print(np.percentile(a,[25,50]))
print(np.percentile(a,[25,50],axis = 0))
print(np.percentile(a,[25,50],1))
'''
[[ 2 5 14]
[16 11 16]
[16 10 8]]
[ 8. 11.]
[[ 9. 7.5 11. ]
[16. 10. 14. ]]
[[ 3.5 13.5 9. ]
[ 5. 16. 10. ]]
'''
均值与方差
计算中位数
numpy.median()
- numpy.median(a, axis=None, out=None, overwrite_input=False, keepdims=False)
numpy.median() 函数用于计算数组 a 中元素的中位数(中值)
import numpy as np
a = np.random.randint(0,11,[3,5])
print(a)
print(np.median(a))
print(np.median(a,0))
print(np.median(a,axis = 1))
'''
[[ 0 7 4 9 0]
[ 8 2 3 5 9]
[ 4 9 0 8 10]]
5.0
[4. 7. 3. 8. 9.]
[4. 5. 8.]
'''
计算平均值
numpy.mean()
- numpy.mean(a[, axis=None, dtype=None, out=None, keepdims=np._NoValue)])
numpy.mean() 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。
算术平均值是沿轴的元素的总和除以元素的数量。
import numpy as np
a = np.random.randint(0,11,[3,5])
print(a)
print(np.mean(a))
print(np.mean(a,0))
print(np.mean(a,axis = 1))
'''
[[3 1 8 6 1]
[8 0 7 6 7]
[9 3 3 0 0]]
4.133333333333334
[6.66666667 1.33333333 6. 4. 2.66666667]
[3.8 5.6 3. ]
'''
计算加权平均值
numpy.average()
- numpy.average(a[, axis=None, weights=None, returned=False])
mean 和 average 都是计算均值的函数,在不指定权重的时候 average 和 mean 是一样的。指定权重
后, average 可以计算加权平均值。
加权平均值即将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数。
考虑数组[1,2,3,4]和相应的权重[4,3,2,1],通过将相应元素的乘积相加,并将和除以权重的和,来计算加权平均值。
import numpy as np
a = np.random.randint(0,11,[3,5])
print(a)
#[[4 9 6 7 7]
#[2 9 7 2 1]
#[2 7 0 7 2]]
print(np.mean(a)) #4.8
print(np.mean(a,0)) #[2.66666667 8.33333333 4.33333333 5.33333333 3.33333333]
print(np.mean(a,axis = 1)) #[6.6 4.2 3.6]
print(np.average(a)) #4.8
print(np.average(a,0)) #[2.66666667 8.33333333 4.33333333 5.33333333 3.33333333]
print(np.average(a,axis = 1)) #[6.6 4.2 3.6]
b = np.random.randint(0,5,[3,5])
print(b)
#[3 3 3 1 1]
#[2 0 4 3 3]
#[1 0 3 0 2]
print(np.average(a,weights = b)) #4.068965517241379
print(np.average(a,0,weights = b)) #[3. 9. 4.6 3.25 2.33333333]
print(np.average(a,axis = 1,weights = b)) #[6.45454545 3.41666667 1. ]
计算标准差
- numpy.std(a[, axis=None, dtype=None, out=None, ddof=0, keepdims=np._NoValue])
标准差是一组数据平均值分散程度的一种度量,是方差的算术平方根。
标准差公式如下:
std = sqrt(mean((x - x.mean())**2))
import numpy as np
print (np.std([1,2,3,4]))
#1.118033988749895
计算方差
统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数,即 mean((x - x.mean())** 2)。
换句话说,标准差是方差的平方根。
- numpy.var(a[, axis=None, dtype=None, out=None, ddof=0, keepdims=np._NoValue])
ddof=0:是“Delta Degrees of Freedom”,表示自由度的个数。
要注意方差和样本方差的无偏估计,方差公式中分母上是 n ;样本方差无偏估计公式中分母上是 n‐1 ( n 为样本个数)。
import numpy as np
print (np.var([1,2,3,4]))
#1.25
相关
计算协方差矩阵
- numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None,aweights=None)
import numpy as np
x = [1, 2, 3, 4, 6]
y = [0, 2, 5, 6, 7]
print(np.cov(x)) # 3.7 #样本方差
print(np.cov(y)) # 8.5 #样本方差
print(np.cov(x, y))
# [[3.7 5.25]
# [5.25 8.5 ]]
print(np.var(x)) # 2.96 #方差
print(np.var(x, ddof=1)) # 3.7 #样本方差
print(np.var(y)) # 6.8 #方差
print(np.var(y, ddof=1)) # 8.5 #样本方差
z = np.mean((x ‐ np.mean(x)) * (y ‐ np.mean(y))) #协方差
print(z) # 4.2
z = np.sum((x ‐ np.mean(x)) * (y ‐ np.mean(y))) / (len(x) ‐ 1) #样本协方差
print(z) # 5.25
z = np.dot(x ‐ np.mean(x), y ‐ np.mean(y)) / (len(x) ‐ 1) #样本协方差
print(z) # 5.25
计算相关系数
- numpy.corrcoef(x, y=None, rowvar=True, bias=np._NoValue, ddof=np._NoValue)`
import numpy as np
np.random.seed(20200623)
x, y = np.random.randint(0, 20, size=(2, 4))
print(x) # [10 2 1 1]
print(y) # [16 18 11 10]
z = np.corrcoef(x, y)
print(z)
# [[1. 0.48510096]
# [0.48510096 1. ]]
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)) # 0.4851009629263671
练习题
1.计算给定数组中每行的最大值。
a = np.random.randint(1, 10, [5, 3])
如何在二维numpy数组的每一行中找到最大值?
import numpy as np
np.random.seed(20201126)
a = np.random.randint(1, 10, [5, 3])
print(a)
print('矩阵a每行的最大值为:')
print(np.amax(a,1))
'''
[[6 7 7]
[1 5 7]
[7 9 5]
[7 1 3]
[3 4 5]]
矩阵a每行的最大值为:
[7 7 9 7 5]
'''