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 驗證所有元素是否爲真

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章