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.sumnp.nansum计算元素的和np.prodnp.nanprod计算元素的积np.meannp.nanmean计算元素的平均值np.stdnp.nanstd计算元素的标准差np.varnp.nanvar计算元素的方差np.minnp.nanmin找出最小值np.maxnp.nanmax找出最大值np.argminnp.nanargmin找出最小值的索引np.argmaxnp.nanargmax找出最大值的索引np.mediannp.nanmedian计算元素的中位数np.percentilenp.nanpercentile计算基于元素排序的统计值np.anyN/A验证任何一个元素是否为真np.allN/A验证所有元素是否为真