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:計算各元素的指數 ;
- 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,計算 ;
- 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