1. 程式人生 > 實用技巧 >Numpy陣列

Numpy陣列

陣列維度變化

  • numpy的基本型別是ndarray,即n維陣列
  • 想用ndarray進行矩陣運算,首先要保證運算物件是二維陣列
  • 一維陣列並不等價於線性代數中的向量,它永遠是一行,沒有轉置,如果想進行矩陣運算必須先升為二維陣列:
a = a[:,None]                   # 方法一
a = np.expand_dims(a, axis=1)   # 方法二

例如:

In [1]: import numpy as np                                                                                                        
In [2]: a = np.array([1,2,3])                                                                                                     
In [3]: a                                                                                                                         
Out[3]: array([1, 2, 3])
In [4]: a.T                                                                                                                       
Out[4]: array([1, 2, 3])

In [5]: a = a[:,None]                                                                                                             
In [6]: a                                                                                                                         
Out[6]: 
array([[1],
       [2],
       [3]])
In [7]: a.T                                                                                                                       
Out[7]: array([[1, 2, 3]])
  • 二維陣列進行矩陣運算不改變陣列的維數,即使結果是一個向量也是二維陣列
In [8]: a=np.array([[1,2,3]])                                                                                                     
In [9]: b=a                                                                                                                       
In [10]: c=np.dot(a, b.T)                                                                                                         
In [11]: c                                                                                                                        
Out[11]: array([[14]])
  • 二維陣列通過索引取出一行/列時會降維
In [14]: a=np.ones((3,3))                                                                                                         
In [15]: a                                                                                                                        
Out[15]: 
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])
In [16]: a[1,:]                                                                                                                   
Out[16]: array([1., 1., 1.])
  • np.mean()等內建函式運算後會自動降維,否則要手動指定keepdims=True
In [17]: np.mean(a, axis=1)                                                                                                       
Out[17]: array([1., 1., 1.])
In [18]: np.mean(a, axis=1, keepdims=True)                                                                                        
Out[18]: 
array([[1.],
       [1.],
       [1.]])
  • 所以在對ndarray進行運算之前先進行shape的檢查是個好習慣

常用函式集錦

  • np.clip()
  • np.percentile()
  • np.indice()