NumPy基礎(附思惟導圖)

  1. 2016-6-3:第一次學習。
  2. 2016-8-23:第二次學習,添加思惟導圖。




數據分析應用關注的重點:
  • 用於數據整理和清理、子集構造和過濾、轉換等快速的矢量化數組運算。
  • 經常使用的數組算法,如排序、惟一化、集合運算等。
  • 高效的描述統計和數據聚合/摘要運算。
  • 用於異構數據集的合併/鏈接運算的數據對齊和關係型數據運算。
  • 將條件邏輯表述爲數組表達式(而不是帶有if-elif-else分支的循環)。
  • 數據的分組運算(聚合、轉換、函數應用等)。

因爲NumPy關注的是數值計算,所以,若是沒有特別指定,數據類型基本都是 float64(浮點數)。

ndarray:一種多維數組對象。每一個對象數組都有一個shape(一個表示各維度大小的元組)和一個dtype(一個用於說明數組數據類型的對象)。
  • 同構數據多維容器(全部元素必須是相同類型的)
  • 精通面向數組的編程和思惟方式是成爲Python科學計算牛人的一大關鍵步驟
  • 建立ndarray:array函數(接受一切序列型的對象);嵌套序列(好比由一組等長列表組成的列表)將會被轉換爲一個多維數組
  • zeros,ones,empty建立數組,傳入指定形狀(各維度的值)便可。
  • arange是Python內置函數range的數組版
  • 能夠經過ndarray的astype方法顯式地轉換其dtype。
  • 矢量化:大小相等的數組之間的任何算術運算都會將運算應用到 元素級。數組與標量的算術運算也會將那個標量值傳播到 各個元素



索引和切片:
  • 跟列表最重要的區別在於,數組切片是原始數組的視圖。這意味着數據不會被複制,視圖上的任何修改都會直接反映到源數組上。若是你想要獲得的是ndarray切片的一份副本而非視圖,就須要顯式地進行復制操做,例如arr[5:8].copy()。
  • 二維數組:【行索引,列索引】 array[0][2]  等價於 array[0, 2]
  • 經過布爾型索引選取數組中的數據,將老是建立數據的副本,即便返回如出一轍的數組也是如此。(Python關鍵字and和or在布爾型數組中無效,需使用&(和)、|(或)之類的布爾算術運算符)
  • 花式索引:利用整數數組進行索引。花式索引跟切片不同,它老是將數據複製到新數組中。arr[[1, 5, 7, 2], [0, 3, 1, 2]]最終選出的是元素(1,0)、(5,3)、(7,1)和(2,2);用於選取方形區域的索引器其實是arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]]或者arr[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])]

數組轉置和軸對換:
  • 簡單的轉置可使用.T,它其實就是進行軸對換而已。
  • 對於高維數組,transpose須要獲得一個由軸編號組成的元組才能對這些軸進行轉置。(按照元祖給出的順序從新排維度)
  • swapaxes方法接受一對軸編號:此兩個維度調轉







NumPy數組使你能夠將許多種數據處理任務表述爲簡潔的數組表達式(不然須要編寫循環)。用數組表達式代替循環的作法,一般被稱爲 矢量化

將條件邏輯表述爲數組運算:
  • np.where
    
    
    
    
# python版本:result = []for i in range(n): if cond1[i] and cond2[i]: result.append(0) elif cond1[i]: result.append(1) elif cond2[i]: result.append(2) else: result.append(3)# np.where版本:np.where(cond1 & cond2, 0, np.where(cond1, 1, np.where(cond2, 2, 3)))# 算數版本:result = 1 * cond1 + 2 * cond2 + 3 * -(cond1 | cond2)

數學和統計方法:
能夠經過數組上的一組數學函數對整個數組或某個軸向的數據進行統計計算。



用於布爾型數組的方法:
sum 常常被用來對布爾型數組中的True值計數;
any 用於測試數組中是否存在一個或多個True;
all 則檢查數組中全部值是否都是True:
   
   
   
   
arr = randn(100)(arr > 0).sum() # Number of positive valuesbools = np.array([False, False, True, False])bools.any()bools.all()

排序:
  • 經過sort方法
  • 多維數組能夠在任何一個軸向上進行排序,只需將軸編號傳給sort便可
  • 頂級方法np.sort返回的是數組的已排序副本,而就地排序則會修改數組自己。
         
         
         
         
    arr = randn(5, 3)# 就地排序arr.sort(1)arr.sort(0)# 頂級排序sorted_arr = np.sort(arr)
  • 計算數組分位數最簡單的辦法是對其進行排序,而後選取特定位置的值:
         
         
         
         
    large_arr = randn(1000)large_arr.sort()large_arr[int(0.05 * len(large_arr))] # 5% quantile

惟一化以及其餘的集合邏輯:
  • np.unique 用於找出數組中的惟一值並返回已排序的結果
  • np.in1d用於測試一個數組中的值在另外一個數組中的成員資格,返回一個布爾型數組:
   
   
   
   
values = np.array([6, 0, 0, 3, 2, 5, 6])np.in1d(values, [2, 3, 6])


將數組以二進制格式保存到磁盤:
  • np.save和np.load是讀寫磁盤數組數據的兩個主要函數。(擴展名爲.npy)
  • np.savez能夠將多個數組保存到一個壓縮文件中。(擴展名爲.npz)

存取文本文件:(更關注pandas中的read_csv和read_table函數)
  • np.loadtxt 或更爲專門化的 np.genfromtxt (面向的是結構化數組和缺失數據處理)將數據加載到普通的NumPy數組中。
  • np.savetxt

線性代數(如矩陣乘法、矩陣分解、行列式以及其餘方陣數學等):
  • dot 函數:矩陣乘法
   
   
   
   
x = np.array([[1., 2., 3.], [4., 5., 6.]])y = np.array([[6., 23.], [-1, 7], [8, 9]])x.dot(y) # equivalently np.dot(x, y)


隨機數生成:
numpy.random模塊:更高效。





相關文章
相關標籤/搜索