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.9381748961800813 In [29]: np.sum(f) Out[29]: 0.9381748961800813 In [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()函數
any()函數
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]])
