用python做數據分析2|numpy庫下進行數組計算的10點tips

今天是4.28號。

天氣又開始變陰,雨持續了一整個月。

之前學習了用python寫爬蟲和python與mongodb數據庫、文件之間的簡單操作。想想自己還是想用python去做數據分析,或者能夠在證券量化工作中用到相應的知識,所以接下來會主要學習數據分析相關的庫numpy,pandas,matplotlib等,至于機器學習的庫scikit-learn則等掌握了前三個庫的使用后再根據需要去學習。


import numpy as np

可以認為numpy就是一個多維的列表(list):

例如
a=[[1,2,3],
   [3,4,5],]
    a.shape能夠得到a是nxn維數組;
    a.dtype能夠得到數組中的元素類型是什么;同時注意narray中所有元素的類型必須是一致的。
取數組a中特定位置的值也是用索引,一維直接用a[x],二維用a[x,y]即第x行第y列的數據。

(1) arange函數在numpy中用于創建等差數組,使用頻率非常高。arange非常類似range函數,在沒有學習numpy時在for循環中,幾乎都用到了range,二者的區別僅僅在于是arange返回的是一個arr數組,而range返回的是list。

range()函數的用法:
   range(1,5) #代表從1到5(不包含5)
  [1, 2, 3, 4]
   range(1,5,2) #代表從1到5,間隔2(不包含5)
  [1, 3]
   range(5) #代表從0到5(不包含5)
  [0, 1, 2, 3, 4]

(2) 花式索引,即利用整數數組進行索引。

例如
arr=[[1,1,2,3],
     [1,4,5,6],
     [3,2,5,0],
     [2,3,1,9]]
那么arr[[1,3]]得到的結果為arr([[1,4,5,6],[2,3,1,9]])

(3) 進行矩陣計算時常用到轉置(T)和內積:
arr.T,可以直接表示轉置
np.dot()函數可以計算內積,如np.dot(a,a.T)

(4) arr是一個數組,有一些函數可以快速對數組中所有的元素進行相應的計算操作:
用法例子為:np.abs(arr),np.sqrt(arr)

1.PNG

對兩個數組的操作為:add(x,y),multiply(x,y)等,執行方法是均是對應位置元素進行計算。
2.png

(5)條件方法 np.where(cond,x,y)三元表達式的使用,其中cond表示條件;x、y可以是單獨的數字,可以是數組。在數據分析中,它常用于根據一個數組產生新的數組。

例如假設現在有兩個數值數組和一個布爾型值數組:
    xarr=np.array([2,2,3,5,6])
    yarr=np.array([5,6,9,0,1])
    con=np.array([False,True,True,True,False])  
現在想根據con的值選取xarr、yarr中的值,當con中值為True時選xarr的值,否則選y的值。
用一般的方法為:
    result=[(x if c else y) for x,y,c in zip(xarr,yarr,con)]

使用np.where()則能極大提高計算效率,用法為:
    result=np.where(con,xarr,yarr)

**(6) 數學和統計方法 **
可通過sum,mean,std等方法對對整個數組或某個軸上的數據進行統計計算,通常叫做約簡(reduction)。

對于axis不懂的可以直接這樣理解,axis=0或沒有即默認為零,就豎著看;aixs=1就橫著看。

若x為一個數組使用方法為:
x.sum(), x.mean()
x.sum(axis=0或1),其中axis=0 表示按行將每一列的向量相加,axis=1表示按列將每一行的向量相加。

sum也可以用來對布爾型數組中的True值計數:
例如:arr=randn(100)
     (arr>0).sum()
3.1.PNG
3.2.png

(7) sort()排序
若x為一個數組,x.sort()默認將數組x中的元素從小到大排序。若x是多維數組,x.sort()會默認按從小到大對每一列進行排序;x.sort(1)則會從小到大對每一行進行排序。

(8) 數組的集合運算
np.unique()與python中set()的功能類似。
例若a=np.array([1,2,3,2,3,4,6])
則np.unique(a)結果為array([1,2,3,4,6]),np,unique()在去除重復元素的同時將元素從小到大進行了排序。

其他集合運算如下,注意集合運算的結果均是數組

4.png

(9) 線性代數的相關計算
這里暫時不作介紹,后面有需要用到時具體學習并補充進來

(10) 隨機數生成
numpy.random模塊對python中內置的random進行了補充。使用隨機數生成函數時一般要加size=()的參數。

例如使用的方法為:

a). numpy.random.normal(size=(4,4))可以得到4x4維服從正太分布的數組,
其中size是normal()函數的一個參數,random的其他函數也有該參數,若該參數缺失,則默認只生成一個值.

b). randint(low,high,size=xx)
    表示從low到high范圍內隨機生成size個整數,且high值取不到。
注意:當high缺失或聲明high=None時,將唯一的一個數作為上限。
    例如:a=np.random.randint(3,size=10)和a=np.random.randint(3,high=None,size=(2,3))
二者表達的意思是一樣的。

c). random.randn(n,n)可以生成nxn維的服從正太分布的隨機數據數組。

部分numpy.random函數如下:


5.png

最后再說一下reshape()函數可以把一維數組轉化為自己想要的多維數組,如下:
np.random.randint(8,size=9).reshape(3,3)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容