Python學習筆記-Numpy速查手冊

Numpy速查手冊

為什麼需要Numpy

Python列表中的元素可以是任何對象,列表中保存的是對象的指針,不方便進行數值運算,浪費內存和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)#集合的差和對稱差

存取數據I/O(文本或二進位文件)

  • 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表示分隔符號

Numpy的數據類型

線性代數計算函數

  • np.dot(x,y),x.dot(y)#矩陣乘法
  • det#計算矩陣行列式
  • arr,brr=qr(crr)#計算QR分解
  • solve#解線性方程組Ax=b,其中A為方陣

隨機數模塊random

  • 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中打開。鏈接:pan.baidu.com/s/1mhW6yl 密碼:clbj

參考文檔:

1、numpy官方手冊:Quickstart tutorial

2、《利用Python進行數據分析》老鼠書numpy章節(第4章):Jupyter Notebook Viewer

3、羅兵老師關於random模塊的文章:numpy的random模塊 - 羅兵 - 博客園
推薦閱讀:

Python——NumPy的random子庫
Numpy中Meshgrid函數介紹及2種應用場景
python numpy的樣本標準差怎麼寫?
為什麼用 Numpy 還是慢, 你用對了嗎?

TAG:Python | numpy | 數據分析 |