20170422 NumPy基礎:數組和矢量計-4

20170422 NumPy基礎:數組和矢量計-4

用於數組的文件輸入輸出P107

NumPy能夠讀寫磁碟上的文本數據或二進位數據。

將數組以二進位格式保存到磁碟

讀寫磁碟數組數據的主要函數:

np.save() 數組數據的保存函數 默認情況下數組是以未壓縮的原始二進位格式保存在擴展名為.np的文件中。

例:np.save(some_array,arr) #將數組arr保存在文件名為some_array的文件中,文件的擴展名為.npy

np.load() 數組數據的讀取函數

例:np.load("some_array.npy") #讀取文件名為some_array.npy的文件

np.savez() 多個數組保存在一個壓縮文件中

例:多個數組保存在壓縮文件中的方法 np.savez(array_achieve.npz,a = arr , b = arr) #將數組arr、arr多個數組通過np.savez()函數保存在文件名為array_achieve.npz的文件中,兩個數組分別以關鍵字參數a,b傳入

例:

In [13]: import numpy as npnnIn [14]: arr = np.arange(10)nnIn [15]: arrnOut[15]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])nnIn [16]: np.save(some_array,arr) #將數組arr保存在文件名為some_array的文件中nnIn [17]: np.load("some_array.npy") #讀取文件名為some_array.npy的文件nOut[17]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])nnIn [18]: np.savez(array_achieve.npz,a = arr , b = arr) #將數組arr、arr多個數組通過np.savez()函數保存在文件名為array_achieve.npz的文件中,兩個數組分別以關鍵字參數a,b傳入nnIn [19]: arch = np.load(array_achieve.npz) #格式為.npz壓縮文件的讀取nnIn [20]: arch[a]nOut[20]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])nnIn [21]: arch[b]nOut[21]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])n

存取文本文件

線性代數(P109)

numpy.linagl中有一組標準的矩陣分解運算以及諸如求逆和行列式之類的東西。

NumPy提供一個用於矩陣乘法的dot函數(既是一個數組方法,也是numpy命名空間中的一個函數)

簡單示例:

In [10]: x = np.array([[1,2,3],[4,5,6]])nnIn [11]: xnOut[11]:narray([[1, 2, 3],n [4, 5, 6]])nnIn [12]: y = np.array([[6,23],[-1,7],[8,9]])nnIn [13]: ynOut[13]:narray([[ 6, 23],n [-1, 7],n [ 8, 9]])nnIn [14]: x.dot(y)nOut[14]:narray([[ 28, 64],n [ 67, 181]])nnIn [15]: np.dot(x,y)nOut[15]:narray([[ 28, 64],n [ 67, 181]])nnIn [16]: np.ones(3)nOut[16]: array([ 1., 1., 1.])nnIn [17]: np.dot(x,np.ones(3))nOut[17]: array([ 6., 15.])nnnIn [20]: X = np.random.randn(5,5)nnIn [22]: XnOut[22]:narray([[ 0.18207207, 1.72049792, -0.49289534, 0.68157757, 0.91080406],n [-0.46842614, -0.39620383, 0.24609983, -1.29044395, 0.68136145],n [-0.86421533, 0.60678851, -0.41663807, 0.63046263, 0.50840259],n [ 1.46215778, 1.76356358, -1.18899341, 1.07743607, -1.72562275],n [-0.88021351, -0.25824057, -1.49189936, 2.15718938, -1.62089422]])nnIn [23]: mat = X.T.dot(X)nnIn [24]: matnOut[24]:narray([[ 3.91212262, 2.78036595, -0.27026304, -0.13968727, -1.68910457],n [ 2.78036595, 6.66212755, -2.90993883, 3.4095423 , -1.01909346],n [-0.27026304, -2.90993883, 4.11656724, -5.415573 , 3.9768971 ],n [-0.13968727, 3.4095423 , -5.415573 , 8.34161118, -5.29377029],n [-1.68910457, -1.01909346, 3.9768971 , -5.29377029, 7.1573626 ]])nnIn [25]: inv(mat)nOut[25]:narray([[ 6.70988965e+00, -6.10176721e+00, -8.62207607e+00,n 9.47235506e-01, 6.20605566e+00],n [ -6.10176721e+00, 5.83330140e+00, 8.30732186e+00,n -7.71257045e-01, -5.79571942e+00],n [ -8.62207607e+00, 8.30732186e+00, 1.37535132e+01,n -2.30139139e-03, -8.49560708e+00],n [ 9.47235506e-01, -7.71257045e-01, -2.30139139e-03,n 9.84661210e-01, 8.43288205e-01],n [ 6.20605566e+00, -5.79571942e+00, -8.49560708e+00,n 8.43288205e-01, 6.12329274e+00]])nnIn [26]: mat.dot(inv(mat))nOut[26]:narray([[ 1.00000000e+00, -8.39729011e-17, 3.93757371e-15,n -9.81431509e-17, 1.43443004e-16],n [ 5.76538092e-15, 1.00000000e+00, -2.73163261e-15,n 2.16485056e-16, 3.54452648e-15],n [ -2.57065793e-15, 8.78064494e-15, 1.00000000e+00,n 1.26582219e-16, -5.84600448e-15],n [ -6.81997060e-15, -5.34146759e-15, -2.80623489e-15,n 1.00000000e+00, -3.39621038e-15],n [ -9.72596209e-15, 1.23412042e-14, 5.22568445e-15,n -7.10920866e-16, 1.00000000e+00]])nnIn [27]: q,r = qr(mat)nnIn [28]: rnOut[28]:narray([[-5.09713322, -6.16656824, 3.18246761, -3.56542486, 4.28992255],n [ 0. , -5.93456727, 5.89922103, -8.41424405, 3.69823793],n [ 0. , 0. , -5.06972826, 7.38115047, -8.17732151],n [ 0. , 0. , 0. , -0.76567851, 0.06865256],n [ 0. , 0. , 0. , 0. , 0.07402602]])nnIn [29]: qnOut[29]:narray([[-0.7675143 , 0.32901528, -0.04564199, -0.29921625, 0.45940962],n [-0.54547641, -0.55579621, -0.4151676 , 0.19264396, -0.42903406],n [ 0.05302256, 0.43524178, -0.27225073, -0.58148307, -0.628896 ],n [ 0.02740507, -0.6029989 , 0.38376119, -0.69604003, 0.06242527],n [ 0.33138325, -0.17261645, -0.77727702, -0.22530792, 0.45328301]])n

隨機數生成(P111)

numpy.random模塊增加了一些用於高效生成多種概率分布的樣本值的函數。

簡單示例:

In [1]: import numpy as npnnIn [2]: arr = np.random.randn(5,4)nnIn [3]: arrnOut[3]:narray([[ 1.11476151, -1.03656705, -1.26626622, 1.14328611],n [-0.32658952, -0.7827758 , 0.21415852, 0.61164342],n [ 0.5736618 , 0.57876044, -1.3266269 , -0.15634624],n [-0.30097248, 1.60078385, -0.08982191, -0.62110974],n [-0.11670452, 0.77794185, 0.57158602, -0.77242323]])nnIn [5]: arr0 = np.random.normal(size=(5,4))nnIn [6]: arr0nOut[6]:narray([[ 1.23077115, -0.51267494, -0.85065664, 0.00999541],n [ 0.77254341, 0.59836949, 0.85072482, 0.81777016],n [ 1.61407136, 0.9391015 , -0.85538774, -0.70827584],n [ 0.34710029, 0.43574492, 1.63638312, -0.8917301 ],n [-0.44526636, 0.75454792, 0.32348238, -1.33493683]])nnIn [7]: arr1 = np.random.rand(5,4)nnIn [8]: arr1nOut[8]:narray([[ 0.93743078, 0.79088073, 0.17438198, 0.9298985 ],n [ 0.47623149, 0.47933615, 0.98692147, 0.64677983],n [ 0.80473425, 0.6997435 , 0.80295311, 0.98581567],n [ 0.40814184, 0.22006755, 0.03149735, 0.19979577],n [ 0.56421592, 0.44211978, 0.34836633, 0.13149839]])n

本節學習總結:

1、數組數據在文件中保存和讀取。

np.save(『文件名』,變數名稱)

np.load(『文件名.npy』)

2、線性代數(矩陣運算函數)

矩陣1.dot(矩陣2) 或者 np.dot(矩陣1,矩陣2)

......

3、隨機數的生成函數

np.random.randn() #產生正態分布(平均值為0,標準差為1)的樣本值

np.random.normal() #產生正態(高斯)分布的樣本值

......


推薦閱讀:

機器學習和數據挖掘的界限在哪裡?
乾貨教程|可能是最方便好用的文字雲工具
如何解決處理大數據的時候的內存不足?
Pandas | 表格整合三大神技之CONCATENATE
南京大學LAMDA(周志華)組的實力如何?

TAG:Python | 数据挖掘 |