掌握numpy(一)
掌握numpy(二)
掌握numpy(三)
掌握numpy(四)html
前面都是介紹numpy的一些特性,被稱爲數學運算神器怎麼能少了統計功能呢python
a = np.array([[-2.5, 3.1, 7], [10, 11, 12]]) >>print "mean =", a.mean() mean = 6.76666666667
上面mean
沒有指定參數,是將ndarray中得全部值相加,求得均值算法
>>a.mean(axis=1) #按行求均值 array([ 2.53, 11. ]) >>a.mean(axis=0) #按列求均值 array([ 3.75, 7.05, 9.5 ])
上面數據是2維的,若是是多維度的怎麼辦呢?數組
a = np.arange(24).reshape(2,3,4) >>a array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]) >>a.sum(axis=0) array([[12, 14, 16, 18],# 12=(0+12) [20, 22, 24, 26],#20=(4+16) [28, 30, 32, 34]]) >>a.sum(axis=1), array([[12, 15, 18, 21],#12=(0+4+8) [48, 51, 54, 57]]) >>a.sum(axis=(0,2)) array([ 60, 92, 124])#60=(0+1+2+3 + 12+14+15+16+18)
下面是一些經常使用得數值統計方法函數
for func in (a.min,a.max,a.prod,a.std,a.var): >> print func.__name__ ,"=",func() min = -2.5 max = 12.0 prod = -71610.0 #內積 std = 5.08483584352 var = 25.8555555556
NumPy還 提供了許多經常使用的數值運算方法,像數值運算中的絕對值、三角和函數、對數等等。這些方法都是element-wise
。學習
a = np.array([[-2.5, 3.1, 7], [10, 11, 12]]) for func in (np.abs, np.sqrt, np.exp, np.log, np.sign, np.ceil, np.modf, np.isnan, np.cos): print"\n", func.__name__ >>print(func(a)) absolute #絕對值 [[ 2.5 3.1 7. ] [ 10. 11. 12. ]] sqrt [[ nan 1.76068169 2.64575131] #不知足運算法則的返回nan [ 3.16227766 3.31662479 3.46410162]] exp [[ 8.20849986e-02 2.21979513e+01 1.09663316e+03] [ 2.20264658e+04 5.98741417e+04 1.62754791e+05]] log [[ nan 1.13140211 1.94591015] [ 2.30258509 2.39789527 2.48490665]] sign [[-1. 1. 1.] [ 1. 1. 1.]] ceil #向上取整 [[ -2. 4. 7.] [ 10. 11. 12.]] modf #返回的爲一個元組=>(小數部分,整數部分) (array([[-0.5, 0.1, 0. ], [ 0. , 0. , 0. ]]), array([[ -2., 3., 7.], [ 10., 11., 12.]])) isnan [[False False False] [False False False]] cos [[-0.80114362 -0.99913515 0.75390225] [-0.83907153 0.0044257 0.84385396]]
ndarray有着python原生數組的全部特性,例如切片(slice)code
a=np.arange(9) >>a array([0, 1, 2, 3, 4, 5, 6, 7, 8]) >>a[2:5] array([2, 3, 4]) >>a[2:-1] array([2, 3, 4, 5, 6, 7]) >>a[:2] array([0, 1]) >>a[::-1] array([8, 7, 6, 5, 4, 3, 2, 1, 0])
固然還有原生數組沒有的特性htm
a[2:5]=-1 >>a array([ 0, 1, -1, -1, -1, 5, 6, 7, 8])
有幾點須要注意的blog
try: a[2:5] = [1,2,3,4,5,6] # too long except ValueError as e: >>print(e) cannot copy sequence with size 6 to array axis with dimension 3
try: del a[2:5] except ValueError as e: >>print(e) ValueError: cannot delete array elements
b = a[3:5] b[0] = 999 >>b array([999, 4]) >>a array([ 0, 1, 2, 999, 4, 5, 6, 7, 8])
若是肯定要拷貝數值,能夠使用copy
方法element
b = a[3:5].copy() b[0] = 999 >>a array([0, 1, 2, 3, 4, 5, 6, 7, 8]) b >>array([999, 4])
多維的ndarray有許多神奇的方法
b = np.arange(24).reshape(4, 6) >>b array([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]]) >>b[1,1] #等價與b[1][1] 7 >>b[1,:]#第一行的全部元素 array([ 6, 7, 8, 9, 10, 11]) >>b[:,1]#第一列的全部元素 array([ 1, 7, 13, 19])
注意:下面的兩種寫法的不一樣
>>b[1,:] array([ 6, 7, 8, 9, 10, 11]) # (6L,) >>b[1:2,:] array([[ 6, 7, 8, 9, 10, 11]])#(1L, 6L)
若是我只想要多維度數組中的第一行和最後一行/列呢?
>>b[(0,-1),:] array([[ 0, 1, 2, 3, 4, 5], [18, 19, 20, 21, 22, 23]])
上面的寫法等價於
index = np.array([True,False,False,True]) >>b[index,:] array([[ 0, 1, 2, 3, 4, 5], [18, 19, 20, 21, 22, 23]])
上面學習了那麼多的知識,咱們來要給小測驗:數組b中第1行和第3行中第4和第6列的元素([[3,5],[15,17]])該怎麼表示呢?
我猜你會這麼寫
>>b[(0,2),(3,5)] array([ 3, 17]) >>b[[0,2],[3,5]] array([ 3, 17])
上面的結果顯然不是咱們想要的,那麼正確的寫法是什麼呢?這時候就須要ix_
方法
index = np.ix_([0,2],[3,5]) >>index (array([[0], [2]]), array([[3, 5]])) >>b[index] array([[ 3, 5], [15, 17]])
對數組的遍歷是咱們常常用的操做,對於numpy數組該由如何遍歷呢?
接着使用上面的數組b
,
for i in b: >>print 'row:',i row: [0 1 2 3 4 5] row: [ 6 7 8 9 10 11] row: [12 13 14 15 16 17] row: [18 19 20 21 22 23]
若是想要遍歷全部的元素呢
for i in b.flat: >>print 'Element:',i Element: 0 Element: 1 Element: 2 .... Element: 21 Element: 22 Element: 23