NumPy聚合(最小值、最大值和其他值)

1、数组值求和

先来看一个小例子, 设想计算一个数组中所有元素的和。 Python 本身可用内置的 sum 函数来实现:

In[1]: import numpy as np
In[2]: L = np.random.random(100)
sum(L)
Out[2]: 55.61209116604941

它的语法和 NumPy 的 sum 函数非常相似, 并且在这个简单的例子中的结果也是一样的:

In[3]: np.sum(L)
Out[3]: 55.612091166049424

但是, 因为 NumPy 的 sum 函数在编译码中执行操作, 所以 NumPy 的操作计算得更快一些:

In[4]: big_array = np.random.rand(1000000)
%timeit sum(big_array)
%timeit np.sum(big_array)
10 loops, best of 3: 104 ms per loop
1000 loops, best of 3: 442 μs per loop

但是需要注意, sum 函数和 np.sum 函数并不等同, 这有时会导致混淆。 尤其是它们各自的可选参数都有不同的含义, np.sum 函数是知道数组的维度的。

2、最大值、最小值

同样, Python 也有内置的 min 函数和 max 函数, 分别被用于获取给定数组的最小值和最大值:

In[5]: min(big_array), max(big_array)
Out[5]: (1.1717128136634614e-06, 0.9999976784968716)
NumPy 对应的函数也有类似的语法, 并且也执行得更快:
In[6]: np.min(big_array), np.max(big_array)
Out[6]: (1.1717128136634614e-06, 0.9999976784968716)
In[7]: %timeit min(big_array)
%timeit np.min(big_array)
10 loops, best of 3: 82.3 ms per loop
1000 loops, best of 3: 497 μs per loop

对于 min、 max、 sum 和其他 NumPy 聚合, 一种更简洁的语法形式是数组对象直接调用这些方法:

In[8]: print(big_array.min(), big_array.max(), big_array.sum())
1.17171281366e-06 0.999997678497 499911.628197

当你操作 NumPy 数组时, 确保你执行的是 NumPy 版本的聚合。
(1)多维度聚合
一种常用的聚合操作是沿着一行或一列聚合。 例如, 假设你有一些
数据存储在二维数组中:

In[9]: M = np.random.random((3, 4))
print(M)
[[ 0.8967576 0.03783739 0.75952519 0.06682827]
[ 0.8354065 0.99196818 0.19544769 0.43447084]
[ 0.66859307 0.15038721 0.37911423 0.6687194]]

默认情况下, 每一个 NumPy 聚合函数将会返回对整个数组的聚合

结果:
In[10]: M.sum()
Out[10]: 6.0850555667307118

聚合函数还有一个参数, 用于指定沿着哪个轴的方向进行聚合。 例如, 可以通过指定 axis=0 找到每一列的最小值:

In[11]: M.min(axis=0)
Out[11]: array([ 0.66859307, 0.03783739, 0.19544769, 0.06682827])

这个函数返回四个值, 对应四列数字的计算值。 同样, 也可以找到每一行的最大值:

In[12]: M.max(axis=1)
Out[12]: array([ 0.8967576 , 0.99196818, 0.6687194])

其他语言的用户会对轴的指定方式比较困惑。 axis 关键字指定的是数组将会被折叠的维度, 而不是将要返回的维度。 因此指定
axis=0 意味着第一个轴将要被折叠——对于二维数组, 这意味着每一列的值都将被聚合。


(2)其他聚合函数
NumPy 提供了很多其他聚合函数, 但是这里不会详细地介绍它们。 另外, 大多数的聚合都有对 NaN 值的安全处理策略(NaNsafe) , 即计算时忽略所有的缺失值, 这些缺失值即特殊的 IEEE浮点型 NaN 值(关于缺失值更全面的介绍请参见 3.5 节) 。 有些NaN-safe 的函数直到 NumPy 1.8 版本才加进去, 所以更早版本的NumPy 并不支持此功能。

                                                               NumPy中可用的聚合函数

函数名称 NaN安全版本 描述
np.sum np.nansum 计算元素的和
np.prod np.nanprod 计算元素的积
np.mean np.nanmean 计算元素的平均值
np.std np.nanstd 计算元素的标准差
np.var np.nanvar 计算元素的方差
np.min np.nanmin 找出最小值
np.max np.nanmax 找出最大值
np.argmin np.nanargmin 找出最小值的索引
np.argmax np.nanargmax 找出最大值的索引
np.median np.nanmedian 计算元素的中位数
np.percentile np.nanpercentile 计算基于元素排序的统计值
np.any N/A 验证任何一个元素是否为真
np.all N/A 验证所有元素是否为真

 


 

 

你可能感兴趣的:(数据分析与数据挖掘)