Numpy中的讀取文件操做和高級庫


跟Python的IO讀寫功能同樣,numpy中也有文件的讀寫功能,將ndarray對象也能夠保存到磁盤文件並從磁盤文件加載。方便保存使用numpy編寫的代碼。在numpy中也有一些高級的庫,今天咱們這裏簡單講一下矩陣庫和線性代數的庫,讓咱們更瞭解numpy這個模塊。數組

1、IO操做架構

Numpy 能夠讀寫磁盤上的文本數據或二進制數據。NumPy 爲 ndarray 對象引入了一個簡單的文件格式:npy。npy 文件用於存儲重建 ndarray 所需的數據、圖形、dtype 和其餘信息。如今在Numpy中可用的IO功能有:ide

  • Load()和save()函數處理numpy二進制文件(須要帶npy擴展名)
  • Loadtxt()和savetxt()函數處理正常的文本文件

Numpy爲ndarray對象引入了一個簡單的文件格式,這個npy文件在磁盤文件中,存儲重建ndarray 所需的數據、圖形、dtype 和其餘信息,以便正確獲取數組,即便該文件在具備不一樣架構的另外一臺機器上。函數

  1. numpy.save()

函數將輸入的數組存儲在具備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

  1. matlib.empty()

函數返回一個新的矩陣,且不初始化元素。

二、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() 返回兩個數組的點積
  • numpy.vdot() 返回兩個向量的點積
  • numpy.inner() 返回一維數組的向量內積
  • numpy.matmul() 返回兩個數組的矩陣乘積
  • numpy.linalg.det() 計算輸入矩陣的行列式
  • numpy.linalg.solve() 求解矩陣形式的線性方程的解
  • numpy.linalg.inv() 計算矩陣的逆

接下來咱們就一個一個方法開始學習如何處理線性代數的方法。

一、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()

這個函數是用來計算矩陣的逆。

相關文章
相關標籤/搜索