Python學習筆記-Numpy速查手冊
05-03
Numpy速查手冊
為什麼需要NumpyPython列表中的元素可以是任何對象,列表中保存的是對象的指針,不方便進行數值運算,浪費內存和CPU計算資源。針對數值運算,Python提供了Array模塊,但只支持一維運算。所以,Numpy就橫空出世了。其數組元素ndarray是一個快速而靈活的大數據集容器。
關鍵縮寫和包導入在這個速查手冊中,我們使用如下縮寫:arr,brr:任意的ndarray對象同時我們需要做如下的引入:
import numpy as np創建ndarray對象- np.array([[1,2,3],[3,4,5]],dtype=float64):將輸入數據(列表、元組、數組等)轉換為ndarray。如果不指定dtype,會自動推斷
- np.asarray((1,2,3)) #將輸入裝換為ndarray
- np.arange(10,25,5)#類似內置的range,返回ndarray
- np.ones((2,2),dtype=np.int32),np.ones_like(arr) #根據指定的形狀和dtype創建全1數組。ones_like以另一個數組作為形狀參數
- np.zeros((2,2),dtype=np.int32),np.zeros_like(arr)#同上,返回的元素都為0
- np.empty((2,2),dtype=np.float),np.empty_like(arr)#同上,返回的元素是未初始化的垃圾值
- np.eye(2),np.identity(3)#創建一個N*N的單位矩陣(對角線為1,其餘為0)
- np.linspace(0,2,9)#創建等差數列,[0,2]中取9個數
- arr[2],arr[0][2]#基礎索引
- A=a1*a2*...*an,an-1代表行,an代表列,A[0]代表從a1這個維度切片
- arr[1,:2],arr[1:2,:2]#切片索引,注意兩者的差別,前者的結果是一維數組,後者是二維的
- arr[arr>0],arr[arr[:,1]==0,:]#布爾型索引,注意布爾型數組的形狀/長度必須與被索引的數組形狀/軸長度一致
- arr[[1,2,3],[2,1,0]]#花式索引,選出3個元素組成的一維數組,(1,2),(2,1),(3,0)
- arr[[1,5,7,2]][:,[0,3,1,2]],arr[:,[0,3,1,2]][[1,5,7,2]] #兩個花式索引的先後順序可變,不影響結果
- 總結一下:基本索引/切片、布爾索引、一級花式索引(僅傳入一組數組)都是引用視圖,,但是,花式索引中一次傳入多個索引數組則會創建副本
- arr.reshape((2,3))#更改數組的形狀,數組中元素的順序不變
- arr.T,arr.transpose((1, 0, 2))#簡單轉置和高級轉置,用元組表示轉換位置的軸,都會創建副本
- arr.swapaxes(1,2)#另一種轉換軸位置的方法,生成的是視圖
- 所有的轉置都會導致數據中元素順序的變化
- 一元ufunc
- np.abs(arr),np.fabs(arr)#計算整數、浮點數或複數元素的絕對值
- sqrt,square#計算數組中各元素的平方根、平方
- exp,log#計算各元素的指數e的x次方及自然對數
- log10,log2,log1p#分別是底數為10的log,底數為2的log,以及log(1+x)
- np.sign(arr)#計算各元素的正負號
- ceil,floor,rint#分別是大於等於該值的最小整數,小於等於該值的最大整數,四捨五入後最接近的整數
- modf#將數組的小數和整數部分以兩個獨立數組返回,,返回多個數組哦~
- isnan,isfinite,isinf#分別返回"哪些是NaN"「哪些是有窮的」「那些是無窮的」的布爾型數組
- cos,cosh,sin,sinh,tan,tanh,arcos,arcosh等三角反三角函數
- np.logical_not(arr)#相當於-arr,一般用於布爾型數組
- 二元ufunc
- np.add(arr,brr),arr+brr#兩個元素或數組相加
- np.subtract(arr,brr),arr-brr#兩個元素或數組相減
- np.divide(arr,brr),arr/brr#兩個元素或數組相除
- np.multiply(arr,brr),arr*brr#兩個元素或數組相除
- np.floor_divide(arr,brr),np.mod(arr,brr) #向下圓整除法(丟棄餘數)和求模計算(除法的餘數)
- np.power(arr,brr),arr**brr#乘方,既能是數組也能是元素,同上
- maximum,fmax#元素級的最大值計算,fmax將忽略NaN
- minimum,fmin#最小值計算,同上
- copysign#將第二個數組中值的符號複製給第一個數組中的值
- greater,greater_equal,less,less_equal,equal,not_equal#相當於中綴運算符>,>=,<,<=,=,!=,產生布爾型數組
- logical_and,logical_or,logical_xor#執行元素級的真值邏輯運算,相當於&,|,^
基本的數組統計方法(一般會有聚合效果)
- np.sum(arr),arr.sum(),np.sum(arr,axis),arr.sum(axis)#對數組中全部或某軸向的元素求和
- mean,std,var#分別代表平均值、標準差和方差(自由度可調默認為n),使用方法同上
- min,max,argmin,argmax#最小值最大值,最小元素和最大元素(第一個)的索引,使用方法同上
- cumsum,cumprod#所有元素的累加與累積,不發生聚合
- 以上的統計方法,在使用軸參數時,都是計算該軸上各元素的統計值,比如axis=1即在列上計算每行對應數據的統計值
其它特殊函數
- where(cond,arr,brr)#cond是條件數組,arrbrr可以是數組或是數值,還可以多重嵌套
- arr.sort(axis)#數組多維時,默認在axis=0上排序。返回數組的已排序副本,就地排序則會修改原數據
- np.unique(arr)#找出數組中的唯一值並返回有序結果
- intersect1d(arr,brr),union1d(arr,brr)#分別計算交集和並集,並返回有序結果
- in1d(arr,brr)#得到一個表示"arr的元素是否包含於brr"的布爾型數組,size與arr相同
- setdiff1d(x,y),setxor1d(x,y)#集合的差和對稱差
- np.load(some_array.npy) #讀取二進位文件記得帶上後綴n(女)p(朋)y(友)
- np.save(some_array.npy,arr) #存在當前路徑下,二進位格式
- np.savez(array.npz,arr,brr)#存儲多個數組到一個壓縮文件
- np.load(array.npz)[arr]#讀取壓縮文件並選取其中一個數組
- np.loadtxt(array.txt,delimiter=,),np.savetxt(array.txt,delimiter=,)#存取文本文件,delimiter表示分隔符號
- np.dot(x,y),x.dot(y)#矩陣乘法
- det#計算矩陣行列式
- arr,brr=qr(crr)#計算QR分解
- solve#解線性方程組Ax=b,其中A為方陣
- np.random.seed(123456)#確定隨機數生成器的種子數量
- np.random.rand(d1,d2,,dn)#元素是(0,1)之間的隨機數,均勻分布
- np.random.randn(d0, d1, ...,dn)# 返回一個標準正態分布(平均值為0,標準差為1)
- randint(a,b,(d1,d2,,,dn))#給定上下限範圍隨機選取整數,[a,b)
- np.random.choice(arr,size,replace,p)#arr可以是一維數組或整數,size指結果數組大小,replace=False指結果數據不重複,p指原始數據選取概率的列表。舉兩個例子np.random.choice(5,4,replace=False,p=[0.1,0.1,0,0,0.8])與np.random.choice(arr,brr)
- permutation#返回一個隨機排列,參數可以是整數或數組
- np.random.normal(loc,scale,size)#返回正態分布,loc是均值,scale是標準差,size是數組大小
- binomial(n,p,size)#二項分布,獨立事件發生概率為p,n次伯努利實驗後成功發生的次數
- uniform(low, high, size)#均勻分布,[low,high)
- np.random.chisquare(df,size)#卡方分布,前面是自由度,後面是size
最後附上代碼筆記,在Jupyter Notebook中打開。鏈接:http://pan.baidu.com/s/1mhW6ylM 密碼:clbj
參考文檔:1、numpy官方手冊:Quickstart tutorial2、《利用Python進行數據分析》老鼠書numpy章節(第4章):Jupyter Notebook Viewer3、羅兵老師關於random模塊的文章:numpy的random模塊 - 羅兵 - 博客園推薦閱讀:
※Python——NumPy的random子庫
※Numpy中Meshgrid函數介紹及2種應用場景
※python numpy的樣本標準差怎麼寫?
※為什麼用 Numpy 還是慢, 你用對了嗎?