numpy(一)——入門

本文用的開發環境是:

  • python 2.7.8
  • numpy 1.14.0
  • jupyter notebook 5.2.2

一、多維數組對象

1、需要先引入numpy包。

import numpy as npn

2、numpy最重要的一個特點就是其n維數組對象,即ndarray,該對象是一個快速而靈活的大數據集容器。創建數組最簡單的辦法就是用array函數,它接受一切序列型的對象(包括其他數組),進而產生一個新的含有傳入數據的numpy數組。大小相同的數組之間可以不用循環即可對數據執行批量運算,並將運算應用到元素級。

3、ndarray是一個通用的同構數據多維容器,也就是說其中的所有元素必須是相同類型的。每個數組都有一個shape(一個表示各維度大小的元組)和一個dtype(一個用於說明數組數據類型的對象):

4、選取數組元素和對數組切片的方式和python的list差不多,通過索引完成。並且對數組的切片是直接對源數組進行修改。如果想要實現複製數組後再對數組操作,則可顯式地執行arr.copy()。

5、對多維數組進行切片時,可以一次傳入多個切片。

6、可將bool型索引用於數組索引,bool型數組的長度必須和被索引數組一致。並且選擇後的數據為創建的副本。

7、花式索引。利用整數數組進行索引,傳入一個用於指定順序的整數列表或ndarray即可。

8、數組轉置。利用數組的T屬性,對數組進行轉置,在進行矩陣計算時經常需要用到該操作。

二、通用函數(ufunc):元素級數組函數

9、一元函數

  • abs、fabs:計算整數、浮點數或複數的絕對值,對於非複數值,可使用更快的fabs;
  • sqrt:計算各元素的平方根,相當於arr ** 0.5;
  • square:計算各元素的平方,相當於arr ** 2;
  • exp:計算各元素的指數e^{x}
  • log、log10、log2、log1p:分別為自然對數(底數為e)、底數為10的log、底數為2的log、log(1+x);
  • sign:計算各元素的正負號,1(正數)、0(零)、-1(負數);
  • ceil:計算各元素的ceiling值,即大於等於該值的最小整數;
  • floor:計算各元素的floor值,即小於等於該值的最大整數;
  • rint:將各元素四捨五入到最接近的整數,保留dtype;
  • modf:將各元素的整數和小數部分,分別以單獨的數組形式返回;
  • isnan:返回一個表示哪些值是「NaN」的bool型數組;
  • isfinite、isinf:分別返回一個表示「哪些元素是有窮的(非inf,非NaN)」或「哪些元素是無窮的」的bool型數組;
  • cos、cosh、sin、sinh、tan、tanh:普通型和雙曲型三角函數;
  • arccos、arccosh、arcsin、arcsinh、arctan、arctanh:反三角函數;
  • logical_not:計算各元素not x的真值,相當於-arr。

10、二元函數

  • add:將數組中對應的元素相加;
  • subtract:第一個數組元素減去第二個數組元素;
  • multiply:數組元素相乘;
  • divide、floor_divide:除法或向下圓整除法(丟棄餘數);
  • power:第一個數組的元素A,第二個數組的元素B,計算 A^{B} ;
  • maximum、fmax:元素級的最大值計算,fmax將忽略NaN;
  • minimum、fmin:元素級的最小值計算,fmin將忽略NaN;
  • mod:元素級的取模運算(除法的餘數);
  • copysign:將第二個數組中的值的符號複製給第一個數組中的值;
  • greater、greater_equal、less、less_equal、equal、not_equal:執行元素級的比較運算,最終產生bool型數組,相當於中綴運算符>、≥、<、≤、==、!=;
  • logical_and、logical_or、logical_xor:執行元素級的真值邏輯運算,相當於中綴運算符&、|、^。

三、利用數組進行數據處理

11、將條件邏輯表述為數組運算。numpy.where函數是三元表達式x if condition else y的矢量化版本。

12、基本數組統計。

  • sum:對數組中全部或某軸向的元素求和,零長度的數組的sum為0;
  • mean:算術平均數,零長度的數組的mean為NaN;
  • std、var:分別為標準差和方差,自由度可調(默認為n);
  • min、max:最大值和最小值;
  • argmax、argmin:分別為最大和最小元素的索引;
  • cumsum:所有元素的累積和;
  • cumprod:所有元素的累計積。

13、bool值會被強制轉換為1(True)和0(False),因此常用sum()來對bool型中的數組計數。另外也可以用any()檢測數組中是否存在一個或多個True,all()檢查數組中所有值是否都為True。

14、排序。可用sort()方法就地排序,該方法只能升序排序。另外,obj.sort()為就地排序,會直接對源數組進行修改,numpy.sort()則會生成一個副本。計算數組分位數最簡單的辦法是對其進行排序,然後選取特定位置的值。

15、找出唯一值。numpy.unique()用於找出數組中的唯一值並返回已排序的結果。

其他數組的集合運算:

  • unique(x):計算x中的唯一元素,並返回有序結果;
  • intersect1d(x,y):計算x和y的公共元素,並返回有序結果;
  • union1d(x,y):計算x和y的並集,並返回有序結果;
  • in1d(x,y):得到一個表示「x的元素是否包含於y」的bool型數組;
  • setdiff1d(x,y):集合的差,即元素在x中且不在於y中;
  • setxor1d(x,y):集合的對稱差,即存在於一個數組中但不同時存在於兩個數組中的元素。

四、用於數組的文件輸入輸出

16、numpy.load()和numpy.save()方法是讀寫磁碟數組數據的兩個主要函數。默認情況下,數據是以未壓縮的原始二進位格式保存在擴展名為.npy的文件中的。

17、可通過numpy.savez()函數將多個數組保存到一個壓縮文件中,將數組以關鍵字參數的形式傳入即可。載入.npz文件時,會得到一個類似字典的對象,該對象會對各個數組進行延遲載入。

18、numpy.loadtxt()和numpy.savetxt()用於文件的讀取和保存。

五、線性代數

19、dot函數可用於矩陣乘法。

20、numpy.linalg中有一組標準的矩陣分解運算以及諸如求逆和行列式之類的東西,以下是常用的numpy.linalg函數。

  • diag:以一維數組的形式返回方陣的對角線(或非對角線)元素,或將一維數組轉換為方陣(非對角線元素為0);
  • dot:矩陣乘法;
  • trace:計算對角線元素的和;
  • det:計算矩陣行列式;
  • eig:計算方陣的本徵值和本徵向量;
  • inv:計算方陣的逆;
  • pinv:計算矩陣的Moore-Penrose偽逆;
  • qr:計算QR分解;
  • svd:計算奇異值分解(SVD);
  • solve:解線性方程組Ax=b,其中A為一個方陣;
  • lstsq:計算Ax=b的最小二乘解。

六、隨機數生成

21、numpy.random模塊對python內置的random進行了補充,增加了一些用於高效生成多種概率分布的樣本值的函數。以下是部分numpy.random函數。

  • seed:確定隨機數生成器的種子;
  • permutation:返回一個序列的隨機排列或返回一個隨機排列的範圍;
  • shuffle:對一個序列就地隨機排列;
  • rand:產生均勻分布的樣本值;
  • randint:從給定的上下限範圍內隨機選取整數;
  • randn:產生正態分布(平均值為0,標準差為1)的樣本值,類似於matlab介面;
  • binomial:產生二項分布的樣本值;
  • normal:產生正態(高斯)分布的樣本值;
  • beta:產生Beta分布的樣本值;
  • chisquare:產生卡方分布的樣本值;
  • gamma:產生Gamma分布的樣本值;
  • uniform:產生在[0,1)中均勻分布的樣本值。

本文筆記為《利用python進行數據分析》一書整理而得。


文章首發於知乎,禁止轉載。


推薦閱讀:

為什麼numpy的array那麼快?
ImagePy教程 —— 幾何變換
將數組以二進位格式保存到磁碟
學習numpy庫
Python · numpy · axis

TAG:numpy | Python | 数据分析 |