Numpy簡介 Numpy(Numerical Python的簡稱)是高性能科學計算和數(shù)據(jù)分析的基礎包,。其部分功能如下: ①ndarray,,一個具有矢量算術運算和復雜廣播能力的快速且節(jié)省空間的多維數(shù)組。②用于對整組數(shù)據(jù)進行快速運算的標準數(shù)學函數(shù)(無需編寫循環(huán)),。 ③用于讀寫磁盤數(shù)據(jù)的工具以及用于操作內(nèi)存映射文件的工具,。 ④線性代數(shù)、隨機數(shù)生成以及傅里葉變換功能,。 ⑤用于集成由C,、C++、Fortran等語言編寫的代碼的工具,。 創(chuàng)建數(shù)組 創(chuàng)建數(shù)組最簡單的辦法是使用array函數(shù),。它接受一切序列型的對象(包括其他數(shù)組),然后產(chǎn)生一個新的含有傳入數(shù)據(jù)的NumPy數(shù)組,。以一個列表的轉換為例: data1=[6,7.5,8,0,1] #創(chuàng)建列表arr1=np.array(data1) #轉換為數(shù)組arr1.dtype #數(shù)據(jù)類型保存在dtype對象中data2=[[1,2,3,4],[5,6,7,8]] #創(chuàng)建嵌套序列(由等長列表組成的列表)arr2=np.array(data2) #轉換為多維數(shù)組np.zeros(10) #創(chuàng)建指定長度(10)的全0數(shù)組np.ones((3,6)) #創(chuàng)建指定長度的(3行6列二維)的全1數(shù)組range(10) #創(chuàng)建指定數(shù)量的順序列表(內(nèi)置函數(shù),默認0開始)arange(10) #創(chuàng)建指定數(shù)量的順序數(shù)組eye(10) #創(chuàng)建一個正方的N×N單位矩陣arr1=np.array([1,2,3],dtype=np.float64) #解釋為特定數(shù)據(jù)類型數(shù)組和標量之間的運算 arr=np.array([[1.,2.,3.],[4.,5.,6.]]) #創(chuàng)建二維數(shù)組arr*arr #行列號相同的數(shù)組元素間運算arr-arr1/arrarr*0.5基本的索引與切片 arr=np.arange(10)arr[5] #索引第6個元素arr[5:8] #索引第6到第9個元素作為數(shù)組arr[5:8]=12 #令第6到第9個元素等于12arr_slice=arr[5:8] #數(shù)組切片是原始數(shù)據(jù)的視圖,,視圖上的任何修改都會反映到原數(shù)組arr_slice[:]=64 #將數(shù)組切片的全部元素改為64arr[5:8].copy() #得到數(shù)組切片的一份副本arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])arr2d[2] #索引二維數(shù)組第3行arr2d[0][2] arr2d[0,2] #等價索引1行3列元素arr2d[:2] #索引第1行和第2行(不含第3行)arr2d[:,:1] #索引第1列arr2d[:-2] #使用負數(shù)索引將從尾部開始選取行數(shù)組轉置和軸對換 轉置(transpose)是重塑的一種特殊形式,它返回的是源數(shù)據(jù)的視圖(不會進行復制操作),。 arr=np.arange(15).reshape((3,5)) #生成順序數(shù)組,,后整形為3行5列arr.T #轉置arr=np.random.randn(6,3) #randn函數(shù)生成一些正態(tài)分布的隨機數(shù)組(6行3列)np.dot(arr.T,arr) #利用np.dot計算矩陣內(nèi)積XTX通用函數(shù):快速的元素級數(shù)組函數(shù) 通用函數(shù)(即ufunc)是一種對ndarray中的數(shù)據(jù)執(zhí)行元素級運算的函數(shù),。 arr=np.arange(10)np.sqrt(arr) #計算各元素的平方根(arr**0.5)exp #計算各元素指數(shù)ex; abs #絕對值;np.add(x,y) #x、y數(shù)組中對應元素相加; subtract #相減; multiply #相乘; divide #相除;利用數(shù)組進行數(shù)據(jù)處理 用數(shù)組表達式代替循環(huán)的做法,,通常稱為矢量化 Numpy.where函數(shù)是三元表達式x if condition else y的矢量化版本 xarr=np.array([1.1,1.2,1.3,1.4,1.5]) #兩個數(shù)值數(shù)組yarr=np.array([2.1,2.2,2.3,2.4,2.5])cond=np.array([True,False,True,True,False]) #一個布爾數(shù)組result=np.where(cond,xarr,yarr) #三元表達式數(shù)學和統(tǒng)計方法 可以通過數(shù)組上的一組數(shù)學函數(shù)對整個數(shù)組或某個軸向的數(shù)據(jù)進行統(tǒng)計計算,。Sum、mean以及標準差std等聚合計算(aggregation,,通常叫做約簡(reduction))既可以當做數(shù)組的實例方法調(diào)用,,也可以當做頂級NumPy函數(shù)使用: arr=np.random.randn(5,4)arr.mean(); np.mean(arr); arr.sum();arr.mean(axis=1) #計算該軸上的統(tǒng)計值(0為列,1為行)用于布爾型數(shù)組的方法 布爾值會被強制轉換為1(True)和0(False),。因此,,sum經(jīng)常被用來對布爾型數(shù)組中的True值計數(shù): arr=randn(100)(arr>0).sum() #正值的數(shù)量bools.any() #用于測試數(shù)組中是否存在一個或多個Truebools.all() #用于測試數(shù)組中所有值是否都是True排序 跟Python內(nèi)置的列表類型一樣,NumPy數(shù)組也可以通過sort方法就地排序(修改數(shù)組本身),。 arr=randn(8)arr.sort()arr=randn(5,3)arr.sort(0) #二維數(shù)組按列排序; arr.sort(1) #二維數(shù)組按行排序;唯一化 ints=np.array([3,3,3,2,2,1,1,4,4])np.unique(names) #找出數(shù)組中的唯一值并返回已排序的結果用于數(shù)組的文件輸入輸出 Numpy能夠讀寫磁盤上的文本數(shù)據(jù)或二進制數(shù)據(jù),。 arr=np.arange(10)np.save(‘some_array’,arr) #數(shù)組以未壓縮的原始二進制格式保存在.npy文件中np.load(‘some_array’) #通過np.load讀取磁盤上的數(shù)組np.savez(‘a(chǎn)rray_archive.npz’,a=arr,b=arr) #將多個數(shù)組以保存在一個壓縮文件中a=np.arange(0,12,0.5).reshape(4,-1)np.savetxt(‘E:\\knakan\\a.txt’,a) #缺省按照’%.18e’格式保存數(shù)據(jù),以空格分隔np.loadtxt(‘E:\\kankan\\a.txt’)np.savetxt(‘E:\\kankan\\a.txt’,a,fmt=”%d”,delimiter=”,”) #改為保存為整數(shù),,以逗號分隔np.loadtxt(‘E:\\kankan\\a.txt’,delimiter=”,”) #讀入時也需指定逗號分隔線性代數(shù) x=np.array([[1.,2.,3.],[4.,5.,6.]])y=np.array([[6.,23.],[-1,7],[8,9]])x.dot(y) #矩陣乘法,,相當于np.dot(x,y) 【參考文獻】 [1]. 利用Python進行數(shù)據(jù)分析,wes McKinney著,,唐學韜譯,,2014年,機械工業(yè)出版社 |
|