跟Python的IO讀寫功能同樣,numpy中也有文件的讀寫功能,將ndarray對象也能夠保存到磁盤文件並從磁盤文件加載。方便保存使用numpy編寫的代碼。在numpy中也有一些高級的庫,今天咱們這裏簡單講一下矩陣庫和線性代數的庫,讓咱們更瞭解numpy這個模塊。數組
1、IO操做架構
Numpy 能夠讀寫磁盤上的文本數據或二進制數據。NumPy 爲 ndarray 對象引入了一個簡單的文件格式:npy。npy 文件用於存儲重建 ndarray 所需的數據、圖形、dtype 和其餘信息。如今在Numpy中可用的IO功能有:ide
Numpy爲ndarray對象引入了一個簡單的文件格式,這個npy文件在磁盤文件中,存儲重建ndarray 所需的數據、圖形、dtype 和其餘信息,以便正確獲取數組,即便該文件在具備不一樣架構的另外一臺機器上。函數
函數將輸入的數組存儲在具備npy擴展名的磁盤文件中。
爲了從outfile.npy重建數組,須要使用load()函數
save() 和 load() 函數接受一個附加的布爾參數 allow_pickles。Python 中的 pickle 用於 在保存到磁盤文件或從磁盤文件讀取以前,對對象進行序列化和反序列化。學習
二、savetxt()spa
函數以簡單文本文件格式存儲和獲取數組數據,是經過 savetxt() 和 loadtx() 函數完成的。
savetxt() 和 loadtxt() 函數接受附加的可選參數,例如頁首,頁尾和分隔符。對象
2、numpy中的矩陣庫索引
NumPy 包包含一個 Matrix 庫 numpy.matlib 。此模塊的函數返回矩陣而不是返回 ndarray對象。一個m*n的矩陣是一個由m行(row)n列(column)元素排列成的矩形陣列。矩陣裏的元素能夠是數字、符號或數學式。rem
函數返回一個新的矩陣,且不初始化元素。
二、numpy.matlib.zeros()數學
此函數返回以0填充的矩陣。
三、numpy.matlib.ones()
此函數返回以1填充的矩陣。
四、numpy.matlib.eye()
這個函數返回一個矩陣,對角線元素爲 1,其餘位置爲零。
五、numpy.matlib.identity()
函數返回給定大小的單位矩陣。單位矩陣是主對角線元素都爲 1 的方陣。
六、numpy.matlib.rand()
函數返回給定大小的填充隨機值的矩陣
在這裏須要注意的是,矩陣老是二維的,而ndarray是一個n維數組,兩個對象都是能夠互換的,可是兩個對象並非相同的。
3、線性代數庫
相信你們在學習線性代數的時候,都會以爲線性代數是很是難學的,線性代數就像一層硬紙,剛開始學習的時候是很是難以穿透的,可是隻要認真的學下去,那麼穿過那個點以後呢就恍然大悟,固然對線性代數掌握不是很好的人也沒事,numpy中有專門的庫numpy.linalg能夠提供線性代數所須要的全部功能,咱們能夠先學習如何處理,而後在慢慢的去學習線性代數基礎知識。
Numpy中提供的方法以下:
接下來咱們就一個一個方法開始學習如何處理線性代數的方法。
一、numpy.dot()
這個函數返回兩個數組的點積。對於二維向量,至關因而矩陣乘法。對於一維數組,它是向量的內積。對於 N 維數組,它是a的最後一個軸上的和與b的倒數第二個軸的乘積。
1.1什麼是矩陣乘法
在這裏我在帶領你們複習一下什麼矩陣乘法,首先在百度中矩陣乘法的定義是這樣的:
矩陣相乘最重要的方法是通常矩陣乘積。它只有在第一個矩陣的列數(column)和第二個矩陣的行數(row)相同時纔有意義。通常單指矩陣乘積時,指的即是通常矩陣乘積。一個m×n的矩陣就是m×n個數排成m行n列的一個數陣。因爲它把許多數據緊湊的集中到了一塊兒,因此有時候能夠簡便地表示一些複雜的模型。
這麼看實際上是比較複雜的,可是我們分開來學,也是很簡單的,假設A矩陣爲m行p列,B矩陣爲p行n列,矩陣相乘後,A*B=C,那麼C矩陣就是m行n列,也就是說矩陣C的行數=矩陣A的行數,矩陣C的列數=矩陣B的列數,矩陣相乘就是A矩陣的行去乘以B矩陣的列。這麼說可能仍是有一些複雜,我們看一下實例就能明白了。
1.2實例
在這個例子中,C矩陣的第一行第一個元素的結果是A矩陣的第一行B矩陣的第一列,也就是11+213=37,第一行第二個元素的結果爲112+214=40。第二行第一個元素爲311+413=85,第二行第二個元素爲312+4*14=92。這麼看的話是否是感受就很清楚了。
在Python的較新版本中還支持了直接使用@號做爲矩陣的乘法,避免在調用numpy.dot()方法了。
二、numpy.vdot()
這個函數返回兩個向量的點積。若是第一個參數是複數,那麼它的共軛複數會用於計算。若是參數是多維數組,它會被展開。
在這裏看,點積也就是對應的元素相乘,也就是111+212+313+414=130,這個方法要求兩個向量的元素相同不在意行和列,若是不一樣的話則會報錯。
三、numpy.inner()
這個函數返回一維數組的向量內積。對於更高的維度,它返回最後一個軸上的乘積的和。
3.一、一維數組
結果等價於10+21+3*0
3.二、二維數組
上面的列子中,內積的計算以下
Array([[111+212,113+214],
[311+412,313+414]])
四、numpy.matmul()
這個函數結果返回兩個數組的矩陣乘積。雖然它返回二維數組的正常乘積,但若是任一參數的維數大於 2,則將其視爲存在於最後兩個索引的矩陣的棧,並進行相應廣播。另外一方面,若是任一參數是一 維數組,則經過在其維度上附加 1 來將其提高爲矩陣,並在乘法以後被去除。
4.一、對於二維數組來講,它就是矩陣的乘法
4.二、二維和一維的運算
計算的過程爲:
Np.matmul(a,b)=[111+212 312+412]
Np.matmul(b,a)=[111+123 112+124]
4.三、維度大於2的數組
計算過程爲
Array([[[00+12,01+31],
[20+36,21+33]],
[[40+52,41+53],
[60+72,61+73]]])
五、numpy.linalg.det()
這個函數計算輸入矩陣的行列式。行列式在線性代數中是很是有用的值。
六、numpy.linalg.solve()
函數給出了矩陣形式的線性方程的解。
例如,考慮如下線性方程:
x + y + z = 6
2y + 5z = -4
2x + 5y - z = 27
可使用矩陣表示爲:
1 2 3
4 5 6 .$left[begin{matrix}x\y\zend{matrix|right]
7 8 9
$
6
-4
27
若是矩陣成爲A、X和B,方程變爲B
七、numpy.linalg.inv()
這個函數是用來計算矩陣的逆。