1.數組當中的函數
通用函數是一種對ndarray中的資料執行元素級運算的函數。數組當中的函數與python當中内置的函數沒有什麼太大的差別,差別就是數組當中的函數可以對數組當中的每一個值進行函數運算不需要編寫循環(矢量化)。
一進制函數
接受一個數組進行運算的函數叫做一進制函數,如sqrt,exp
In [4]: arr=np.arange(10)
In [5]: arr
Out[5]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [6]: np.sqrt(arr)
Out[6]:
array([0. ,1. , 1.41421356, 1.73205081, 2. ,2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])
In [7]: np.exp(arr)
Out[7]:
array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,2.98095799e+03, 8.10308393e+03])
二進制函數
另外一些函數接受兩個數組并傳回一個結果數組。如add,maxium。同時還帶有一個out參數,能夠将運算結果直接賦予其中一個數組,不必在記憶體當中在進行一次copy操作
In [21]: np.maximum(a,b)
Out[21]:
array([1.0166274 , 0.43801254, 1.43846716, 1.01247244, 0.80244409,0.31912314, -0.42904361])
In [22]: np.maximum(a,b,out=a)
Out[22]:
array([1.0166274 , 0.43801254, 1.43846716, 1.01247244, 0.80244409,0.31912314, -0.42904361])
In [23]: a
Out[23]:
array([1.0166274 , 0.43801254, 1.43846716, 1.01247244, 0.80244409,0.31912314, -0.42904361])
常見一進制和二進制函數
Numpy.where函數
numpy.where 是三元表達式x if condition else y的矢量化版本,具體用法是np.where(cond,xarr,yarr),條件為真則引用第一個數組,條件為假則引用第二個數組
以下是一個例子,将數組當中大于0的值替換為2,小于0的值替換為-2:
In [26]: f
Out[26]:
array([[-0.45507675, -1.54076971, -1.01814123, -0.18394114],
[0.12222621, 1.33999903, 0.16996622, -1.36640899],
[1.09578869, 0.60744966, -0.99855471, 1.11188253],
[-0.0239628 , 1.96097014, -0.25486583, 0.37161357]])
In [27]: np.where(f>0,2,-2)
Out[27]:
array([[-2, -2, -2, -2],
[2, 2, 2, -2],
[2, 2, -2, 2],
[-2, 2, -2, 2]])
基本數組統計方法
可以通過數組上的一組數學函數對整個數組或者數組當中的某個軸的資料進行計算。獲得該數組的統計資訊。例如求和,平均數,标準差std。
這些函數既可以當做數組的執行個體方法使用,也可以當做頂級Numpy函數使用。關于axis,教給大家一個0列一行,當你想要行的數值則axis=1,否則為0.
In [32]: f
Out[32]:
array([[-0.45507675, -1.54076971, -1.01814123, -0.18394114],
[0.12222621, 1.33999903, 0.16996622, -1.36640899],
[1.09578869, 0.60744966, -0.99855471, 1.11188253],
[-0.0239628 , 1.96097014, -0.25486583, 0.37161357]])
In [28]: f.sum()
Out[28]: 0.9381748961800813In [29]: np.sum(f)
Out[29]: 0.9381748961800813In [30]: np.mean(f,axis=1)
Out[30]: array([-0.79948221, 0.06644562, 0.45414154, 0.51343877])
In [31]: np.sum(f,axis=1)
Out[31]: array([-3.19792883, 0.26578247, 1.81656618, 2.05375508])
數組統計方法
布爾數組方法 any all
在數組當中的布爾值會被當做1和0,是以當你想要獲得數組當中有多少為真可以這樣做(arr>0).sum(),any和all 用來檢測數組當中的布爾值。
all()函數
檢查行或者列當中的 bool值是否全部都是True 或者False
any()函數
檢查當中是否有為True的值
這兩個傳回一個布爾值
In [32]: f
Out[32]:
array([[-0.45507675, -1.54076971, -1.01814123, -0.18394114],
[0.12222621, 1.33999903, 0.16996622, -1.36640899],
[1.09578869, 0.60744966, -0.99855471, 1.11188253],
[-0.0239628 , 1.96097014, -0.25486583, 0.37161357]])
In [33]: (f>0).any()
Out[33]: True
In [34]: (f>0).all()
Out[34]: False
數組的排序
像python當中的list,tuple,dict等一樣,數組同樣具有排序方法,需要注意的是
sort作為内置方法時,通常是對數組本身進行排序,不會生成一個新的數組
In [36]: f
Out[36]:
array([[-1.54076971, -1.01814123, -0.45507675, -0.18394114],
[-1.36640899, 0.12222621, 0.16996622, 1.33999903],
[-0.99855471, 0.60744966, 1.09578869, 1.11188253],
[-0.25486583, -0.0239628 , 0.37161357, 1.96097014]])
In [37]: m=f.sort()
In [38]: m
In [39]:
In [39]:
作為numpy的頂級方法使用時,會返還一個新的數組
In [39]: m=np.sort(f)
In [40]: m
Out[40]:
array([[-1.54076971, -1.01814123, -0.45507675, -0.18394114],
[-1.36640899, 0.12222621, 0.16996622, 1.33999903],
[-0.99855471, 0.60744966, 1.09578869, 1.11188253],
[-0.25486583, -0.0239628 , 0.37161357, 1.96097014]])