Numpy 统计函数

Numpy 统计函数

NumPy 提供了很多统计函数,例如对数组求和、用于从数组中查找最小元素,最大元素,百分位标准差和方差等。

常用的统计函数如下:

函数说明
sum对数组中的全部或沿着轴向的元素求和。
mean、median求数组的算术平均值、中位数
std、var分别为标准差和方差
min、max最小值和最大值
argmin、argmax分别为最小和最大元素的索引
cumsum所有元素的累计和
cumprod所有元素的累计积
percentile计算数组的百分比分位数

1. 聚合计算

1.1 常用聚合方法举例

sum、mean、std 等函数,可以实现聚合计算的效果,得到的结果的通常是零维的。此外,函数可以通过接收一个axis参数,指定聚合计算的方向,最终结果是一个少一维的数组。

案例

生成数组arr0,并查看:

arr0 = np.arange().reshape(,)arr0
out:array([[ ,  ,  ,  ],   [ ,  ,  ,  ],   [ ,  , , ],   [, , , ]])

分别对数组求和、求平均、求中位数、求方差和标准差:

print(数组求和结果为:, np.sum(arr0))print(数组求平均结果为:, np.mean(arr0))print(数组求中位数结果为:, np.median(arr0))print(数组求方差结果为:, np.var(arr0))print(数组求标准差结果为:, np.std(arr0))print(数组求最小值为:, np.min(arr0))print(数组求最大值为:, np.max(arr0))

输出结果为:

数组求和结果为: 
数组求平均结果为: 
数组求中位数结果为: 
数组求方差结果为: 
数组求标准差结果为: 
数组求最小值为: 
数组求最大值为:

案例

在进行统计运算的时候,也可以把统计函数作为数组的实例方法进行调用。例如,上述的语法可以改写成:

print(数组求和结果为:, arr0.sum())print(数组求平均结果为:, arr0.mean())print(数组求方差结果为:, arr0.var())print(数组求标准差结果为:, arr0.std())print(数组求最小值为:, arr0.min())print(数组求最大值为:, arr0.max())

输出结果为:

数组求和结果为: 
数组求平均结果为: 
数组求方差结果为: 
数组求标准差结果为: 
数组求最小值为: 
数组求最大值为:

注意,中位数 median 求解无法用上述方法调用。

案例

对于二维数组,最外层的轴(也即垂直方向)记为axis=0,内层的轴(也即水平方向)记为axis=1。在调用统计函数的时候,可以通过指定axis来明确聚合的方向。

例如,对 arr0 进行统计方法的水平方向聚合:

print(数组水平方向求和结果为:, np.sum(arr0, axis=))print(数组水平方向求平均结果为:, np.mean(arr0, axis=))print(数组水平方向求中位数结果为:, np.median(arr0, axis=))print(数组水平方向求方差结果为:, np.var(arr0, axis=))print(数组水平方向求标准差结果为:, np.std(arr0, axis=))print(数组水平方向求最小值为:, np.min(arr0, axis=))print(数组水平方向求最大值为:, np.max(arr0, axis=))

输出结果为:

数组水平方向求和结果为: [    ]数组水平方向求平均结果为: [      ]数组水平方向求中位数结果为: [      ]数组水平方向求方差结果为: [   ]数组水平方向求标准差结果为: [   ]数组水平方向求最小值为: [      ]数组水平方向求最大值为: [     ]

同样地,实例调用方法也可以实现上述效果:

print(数组垂直方向求和结果为:, arr0.sum(axis=))

输出结果为:

数组垂直方向求和结果为: [   ]

2. 其他函数运算

2.1 累计和、累计积

cumsum 和 cumprod 则不聚合,而是产生一个由中间结果组成的数组。

案例

计算 arr0 的累计和:

np.cumsum(arr0)

输出结果为:

array([  ,   ,   ,   ,  ,  ,  ,  ,  ,  ,  ,  ,  ,, , ], dtype=int32)

可以看出,如果不指定方向,则会把数组展开为一维数组并进行累计运算。

案例

分别计算水平方向的累计和和垂直方向的累计积:

print(计算水平方向的累计和, arr0.cumsum(axis=))print(计算垂直方向的累计积, arr0.cumprod(axis=))

输出结果为:

计算水平方向的累计和 [[       ]
 [     ]
 [    ]
 [   ]]计算垂直方向的累计积 [[               ]
 [             ]
 [          ]
 [       ]]

2.2 计算百分位数

百分位数是统计中使用的度量,表示小于这个值的观察值的百分比。 函数 numpy.percentile() 接受以下参数。

numpy.percentile(a, q, axis)

参数说明:

参数说明
a输入数组
q要计算的百分位数,在 0 ~ 100 之间
axis沿着它计算百分位数的轴

首先明确百分位数 P 的概念

p 个百分位数是这样一个值,它使得至少有 p% 的数据项小于或等于这个值,且至少有 (100-p)% 的数据项大于或等于这个值。

案例

对数组 arr0 水平方向的中位数(百分之五十分位数),也可以按照如下写法:

np.percentile(arr0, , axis=)

输出结果为:

array([ ,  ,  , ])

3. 小结

本节介绍了常用的统计函数。在对部分统计函数进行调用,除了以函数的方法,也可以以数组实例方法调用。特别地,可以通过指定 axis 的值,来规定统计计算的方向。

NumPy 提供了很多统计函数,例如对数组求和、用于从数组中查找最小元素,最大元素,百分位标准差和方差等。