跟Python的IO讀寫功能一樣,numpy中也有文件的讀寫功能,將ndarray對象也可以保存到磁盤文件并從磁盤文件加載。方便保存使用numpy編寫的代碼。在numpy中也有一些高級的庫,今天我們這里簡單講一下矩陣庫和線性代數(shù)的庫,讓我們更了解numpy這個(gè)模塊。 一、IO操作 Numpy 可以讀寫磁盤上的文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù)。NumPy 為 ndarray 對象引入了一個(gè)簡單的文件格式:npy。npy 文件用于存儲(chǔ)重建 ndarray 所需的數(shù)據(jù)、圖形、dtype 和其他信息?,F(xiàn)在在Numpy中可用的IO功能有:
Numpy為ndarray對象引入了一個(gè)簡單的文件格式,這個(gè)npy文件在磁盤文件中,存儲(chǔ)重建ndarray 所需的數(shù)據(jù)、圖形、dtype 和其他信息,以便正確獲取數(shù)組,即使該文件在具有不同架構(gòu)的另一臺(tái)機(jī)器上。
函數(shù)將輸入的數(shù)組存儲(chǔ)在具有npy擴(kuò)展名的磁盤文件中。 為了從outfile.npy重建數(shù)組,需要使用load()函數(shù)
2、savetxt() 函數(shù)以簡單文本文件格式存儲(chǔ)和獲取數(shù)組數(shù)據(jù),是通過 savetxt() 和 loadtx() 函數(shù)完成的。 savetxt() 和 loadtxt() 函數(shù)接受附加的可選參數(shù),例如頁首,頁尾和分隔符。 二、numpy中的矩陣庫 NumPy 包包含一個(gè) Matrix 庫 numpy.matlib 。此模塊的函數(shù)返回矩陣而不是返回 ndarray對象。一個(gè)m*n的矩陣是一個(gè)由m行(row)n列(column)元素排列成的矩形陣列。矩陣?yán)锏脑乜梢允菙?shù)字、符號或數(shù)學(xué)式。
函數(shù)返回一個(gè)新的矩陣,且不初始化元素。 2、numpy.matlib.zeros() 此函數(shù)返回以0填充的矩陣。 3、numpy.matlib.ones() 此函數(shù)返回以1填充的矩陣。 4、numpy.matlib.eye() 這個(gè)函數(shù)返回一個(gè)矩陣,對角線元素為 1,其他位置為零。 5、numpy.matlib.identity() 函數(shù)返回給定大小的單位矩陣。單位矩陣是主對角線元素都為 1 的方陣。 6、numpy.matlib.rand() 函數(shù)返回給定大小的填充隨機(jī)值的矩陣 在這里需要注意的是,矩陣總是二維的,而ndarray是一個(gè)n維數(shù)組,兩個(gè)對象都是可以互換的,但是兩個(gè)對象并不是相同的。 三、線性代數(shù)庫 相信大家在學(xué)習(xí)線性代數(shù)的時(shí)候,都會(huì)覺得線性代數(shù)是非常難學(xué)的,線性代數(shù)就像一層硬紙,剛開始學(xué)習(xí)的時(shí)候是非常難以穿透的,但是只要認(rèn)真的學(xué)下去,那么穿過那個(gè)點(diǎn)之后呢就恍然大悟,當(dāng)然對線性代數(shù)掌握不是很好的人也沒事,numpy中有專門的庫numpy.linalg可以提供線性代數(shù)所需要的所有功能,我們可以先學(xué)習(xí)如何處理,然后在慢慢的去學(xué)習(xí)線性代數(shù)基礎(chǔ)知識(shí)。 Numpy中提供的方法如下:
接下來我們就一個(gè)一個(gè)方法開始學(xué)習(xí)如何處理線性代數(shù)的方法。 1、numpy.dot() 這個(gè)函數(shù)返回兩個(gè)數(shù)組的點(diǎn)積。對于二維向量,相當(dāng)于是矩陣乘法。對于一維數(shù)組,它是向量的內(nèi)積。對于 N 維數(shù)組,它是a的最后一個(gè)軸上的和與b的倒數(shù)第二個(gè)軸的乘積。 1.1什么是矩陣乘法 在這里我在帶領(lǐng)大家復(fù)習(xí)一下什么矩陣乘法,首先在百度中矩陣乘法的定義是這樣的: 矩陣相乘最重要的方法是一般矩陣乘積。它只有在第一個(gè)矩陣的列數(shù)(column)和第二個(gè)矩陣的行數(shù)(row)相同時(shí)才有意義。一般單指矩陣乘積時(shí),指的便是一般矩陣乘積。一個(gè)m×n的矩陣就是m×n個(gè)數(shù)排成m行n列的一個(gè)數(shù)陣。由于它把許多數(shù)據(jù)緊湊的集中到了一起,所以有時(shí)候可以簡便地表示一些復(fù)雜的模型。 這么看其實(shí)是比較復(fù)雜的,但是咱們分開來學(xué),也是很簡單的,假設(shè)A矩陣為m行p列,B矩陣為p行n列,矩陣相乘后,A*B=C,那么C矩陣就是m行n列,也就是說矩陣C的行數(shù)=矩陣A的行數(shù),矩陣C的列數(shù)=矩陣B的列數(shù),矩陣相乘就是A矩陣的行去乘以B矩陣的列。這么說可能還是有一些復(fù)雜,咱們看一下實(shí)例就能明白了。 1.2實(shí)例
在Python的較新版本中還支持了直接使用@號作為矩陣的乘法,避免在調(diào)用numpy.dot()方法了。 2、numpy.vdot() 這個(gè)函數(shù)返回兩個(gè)向量的點(diǎn)積。如果第一個(gè)參數(shù)是復(fù)數(shù),那么它的共軛復(fù)數(shù)會(huì)用于計(jì)算。如果參數(shù)是多維數(shù)組,它會(huì)被展開。
這個(gè)函數(shù)返回一維數(shù)組的向量內(nèi)積。對于更高的維度,它返回最后一個(gè)軸上的乘積的和。 3.1、一維數(shù)組
3.2、二維數(shù)組 上面的列子中,內(nèi)積的計(jì)算如下 Array([[111+212,113+214], [311+412,313+414]]) 4、numpy.matmul() 這個(gè)函數(shù)結(jié)果返回兩個(gè)數(shù)組的矩陣乘積。雖然它返回二維數(shù)組的正常乘積,但如果任一參數(shù)的維數(shù)大于 2,則將其視為存在于最后兩個(gè)索引的矩陣的棧,并進(jìn)行相應(yīng)廣播。另一方面,如果任一參數(shù)是一 維數(shù)組,則通過在其維度上附加 1 來將其提升為矩陣,并在乘法之后被去除。 4.1、對于二維數(shù)組來說,它就是矩陣的乘法 4.2、二維和一維的運(yùn)算
Np.matmul(a,b)=[111+212 312+412] Np.matmul(b,a)=[111+123 112+124] 4.3、維度大于2的數(shù)組 計(jì)算過程為 Array([[[00+12,01+31], [20+36,21+33]], [[40+52,41+53], [60+72,61+73]]]) 5、numpy.linalg.det() 這個(gè)函數(shù)計(jì)算輸入矩陣的行列式。行列式在線性代數(shù)中是非常有用的值。 6、numpy.linalg.solve() 函數(shù)給出了矩陣形式的線性方程的解。 例如,考慮以下線性方程: x + y + z = 6 2y + 5z = -4 2x + 5y - z = 27 可以使用矩陣表示為: 1 2 3 4 5 6 .$\left[\begin{matrix}x\y\z\end{matrix|\right] 7 8 9 $ 6 -4 27 如果矩陣成為A、X和B,方程變?yōu)锽 7、numpy.linalg.inv() 這個(gè)函數(shù)是用來計(jì)算矩陣的逆。 |
|