數學學習如此容易:用Python學習線性代數

2020-12-05 python大大

還在為學習數學而發愁嗎?看完這篇文章,希望Python能幫助你消滅數學恐懼症。

用NumPy進行線性代數運算

線性代數是數學的一個重要分支,比如,我們可以使用線性代數來解決線性回歸問題。子程序包numpy.linalg提供了許多線性代數例程,我們可以用它來計算矩陣的逆、計算特徵值、求解線性方程或計算行列式等。對於NumPy來說,矩陣可以用ndarray的一個子類來表示。

用NumPy求矩陣的逆在線性代數中,假設A是一個方陣或可逆矩陣,如果存在一個矩陣A -1 ,滿足矩陣A -1 與原矩陣A相乘後等於單位矩陣I這一條件,那麼就稱矩陣A -1 是A的逆,相應的數學方程如下所示:

A A-1 = I

子程序包numpy.linalg中的inv()函數就是用來求矩陣的逆的。下面通過一個例子進行說明,具體步驟如下所示。

1.創建一個示例矩陣。

利用mat()函數創建一個示例矩陣:

A = np.mat("2 4 6;4 2 6;10 -4 18")print "A\n", A

矩陣A的內容如下所示:

A[[ 2  4  6][ 4  2  6] [10 -4 18]]]

2.求矩陣的逆。

現在可以利用inv()子例程來計算逆矩陣了:

inverse = np.linalg.inv(A)print "inverse of A\n", inverse

逆矩陣顯示如下:

inverse of A[[-0.41666667  0.66666667 -0.08333333][ 0.08333333  0.16666667 -0.08333333] [ 0.25       -0.33333333  0.08333333]]

小技巧:

如果該矩陣是奇異的,或者非方陣,那麼就會得到LinAlgError消息。如果你喜歡的話,也可以通過手算來驗證這個計算結果。這就當作是留給你的一個作業吧。NumPy庫中的pinv()函數可以用來求偽逆矩陣,它適用於任意矩陣,包括非方陣。

3.利用乘法進行驗算。

下面,我們將inv()函數的計算結果乘以原矩陣,驗算結果是否正確:

print "Check\n", A * inverse

不出所料,果然得到了一個單位矩陣(當然,前提是一些小誤差忽略不計):

Check[[  1.00000000e+00   0.00000000e+00  -5.55111512e-17][ -2.22044605e-16   1.00000000e+00  -5.55111512e-17] [ -8.88178420e-16   8.88178420e-16   1.00000000e+00]]

將上面的計算機結果減去3×3的單位矩陣,會得到求逆過程中出現的誤差:

print "Error\n", A * inverse - np.eye(3)

一般來說,這些誤差通常忽略不計,但是在某些情況下,細微的誤差也可能導致不良後果:

[[ -1.11022302e-16   0.00000000e+00  -5.55111512e-17][ -2.22044605e-16   4.44089210e-16  -5.55111512e-17] [ -8.88178420e-16   8.88178420e-16  -1.11022302e-16]]

這種情況下,我們需要使用精度更高的數據類型,或者更高級的算法。上面,我們使用了numpy.linalg子程序包的inv()例程來計算矩陣的逆。下面,我們用矩陣乘法來驗證這個逆矩陣是否符合我們的要求(詳見本書代碼包中的inversion.py文件):

import numpy as npA = np.mat("2 4 6;4 2 6;10 -4 18")print "A\n", Ainverse = np.linalg.inv(A)print "inverse of A\n", inverseprint "Check\n", A * inverseprint "Error\n", A * inverse - np.eye(3)

用NumPy解線性方程組矩陣可以通過線性方式把一個向量變換成另一個向量,因此從數值計算的角度看,這種操作對應於一個線性方程組。Numpy.linalg中的solve()子例程可以求解類似Ax = b這種形式的線性方程組,其中A是一個矩陣,b是一維或者二維數組,而x是未知量。下面介紹如何使用dot()函數來計算兩個浮點型數組的點積(dot product)。

這裡舉例說明解線性方程組的過程,具體步驟如下所示。

1.創建矩陣A和數組b,代碼如下所示:

A = np.mat("1 -2 1;0 2 -8;-4 5 9")print "A\n", Ab = np.array([0, 8, -9])print "b\n", b

矩陣A和數組(向量)b的定義如下所示:

2.調用solve()函數。

接下來,我們用solve()函數來解這個線性方程組:

x = np.linalg.solve(A, b)print "Solution", x

線性方程組的解如下所示:

Solution [ 29.  16.   3.]

3.利用dot()函數進行驗算。

利用dot()函數驗算這個解是否正確:

print "Check\n", np.dot(A , x)

結果不出所料:

Check[[ 0.  8. -9.]]

前面,我們通過NumPy的linalg子程序包中的solve()函數求出了線性方程組的解,並利用dot()函數(詳見本書代碼包中的solution.py文件)驗算了結果,下面把這些代碼放到一起:

import numpy as npA = np.mat("1 -2 1;0 2 -8;-4 5 9")print "A\n", Ab = np.array([0, 8, -9])print "b\n", bx = np.linalg.solve(A, b)print "Solution", xprint "Check\n", np.dot(A , x)

相關焦點

  • 資源|用Python和NumPy學習《深度學習》中的線性代數基礎
    本文系巴黎高等師範學院在讀博士 Hadrien Jean 的一篇基礎學習博客,其目的是幫助初學者/高級初學者基於深度學習和機器學習來掌握線性代數的概念。掌握這些技能可以提高你理解和應用各種數據科學算法的能力。
  • 深度學習和機器學習的線性代數入門
    神經元是深度學習的基本單位,該結構完全基於數學概念,即輸入和權重的乘積和。至於Sigmoid,ReLU等等激活函數也依賴於數學原理。正確理解機器學習和深度學習的概念,掌握以下這些數學領域至關重要:機器學習和深度學習中的線性代數在機器學習中,很多情況下需要向量化處理,為此,掌握線性代數的知識至關重要。
  • 為什麼學習線性代數?
    簡短的回答就是:        (1)我們所處的世界、宇宙太複雜了,很多現象都無法理解,更談不上用數學去描述;        (2)有一些符合特定條件的複雜問題,可以轉化為簡單的線性問題,線性問題就完全可以理解、完全可以被數學所描述(怎麼把複雜問題轉為線性問題是別的學科要解決的,比如說微積分);        (3)線性代數就是研究怎麼解決線性問題的
  • Python學習第116課——numpy.dot和矩陣相乘的數學運算
    【每天幾分鐘,從零入門python編程的世界!】關於numpy中數組的相乘,我們學習了對位相乘(用numpy.multiply、或*直接相乘,比如數組a和b的對位相乘就是numpy.multiply(a,b)或a*b)和一維數組的點乘(dot product,也有人叫inner product,比如一維數組a和b的點乘就是a.b)。
  • 線性代數與數據學習:MIT教授Gilbert Strang幫你打下堅實的數學...
    機器之心編輯作者:思源、劉曉坤MIT 教授 Gilbert Strang 最新書籍《線性代數與數據學習這一本書為機器學習提供了很多數學基礎,它同時也提供了深度學習一些基本概念。可以說藉助這本書,我們能從數學的角度來理解流行的模型。
  • 強化學習中的線性代數知識
    線性代數的基本原理如何用於深度強化學習?答案是解決了馬爾可夫決策過程時的迭代更新。強化學習(RL)是一系列用於迭代性學習任務的智能方法。由於計算機科學是一個計算領域,這種學習發生在狀態向量、動作等以及轉移矩陣上。狀態和向量可以採用不同的形式。當我們考慮通過某個線性系統傳遞一個向量變量,並得到一個類似的輸出時,應該想到特徵值。
  • 學習筆記,從NumPy到Scrapy,學習Python不能錯過這些庫
    在網絡上看到幾位前輩寫了關於python深度學習庫的文章,對於小小白來說,因為我剛開始學python,我得承認自己看完後依然覺得雲裡霧裡的,不知道這些庫到底對我有什麼用處。所以我到網絡上搜集補充關於這些庫的說明內容,感覺在這個整理資料的過程中,對於這些python程序庫了解了更多,以下是我整理的學習筆記。
  • 詳細解讀,8000字線性代數知識點長文,帶你入門深度學習/機器學習
    本文目錄:引言機器學習和深度學習建立在數學原理和概念之上,因此AI學習者需要了解基本數學原理。在模型構建過程中,我們經常設計各種概念,例如維數災難、正則化、二進位、多分類、有序回歸等。神經元是深度學習的基本單位,該結構完全基於數學概念,即輸入和權重的乘積和。至於Sigmoid,ReLU等等激活函數也依賴於數學原理。
  • 乾貨| 請收下這份2018學習清單:150個最好的機器學習,NLP和Python...
    我把這博文分成四個部分,機器學習,NLP,Python,和數學基礎。在每一小節我會隨機引入一些問題。由於這方面學習材料太豐富了,本文並未涵括所有內容。機器學習1、機器學習就是這麼好玩!://nbviewer.jupyter.org/github/rhiever/Data-Analysis-and-Machine-Learning-Projects/blob/master/example-data-science-notebook/Example Machine Learning Notebook.ipynb2、實例小白如何用python
  • ...請收下這份2018學習清單:150個最好的機器學習,NLP和Python教程
    我把這博文分成四個部分,機器學習,NLP,Python,和數學基礎。在每一小節我會隨機引入一些問題。由於這方面學習材料太豐富了,本文並未涵括所有內容。機器學習1、機器學習就是這麼好玩!實現感知器算法(machinelearningmastery.com)http://machinelearningmastery.com/implement-perceptron-algorithm-scratch-python/小學生用python實現一個神經網絡(wildml.com
  • 線性代數學習之矩陣不只是m*n個數字
    什麼是矩陣:繼續接著上一次線性代數學習之向量的高級話題的線性代數往下學習,前兩次的學習都是跟Vector相關的,也就是學習線性代數這裡是從Vector
  • 乾貨 | 請收下這份2018學習清單:150個最好的機器學習,NLP和Python教程
    我把這博文分成四個部分,機器學習,NLP,Python,和數學基礎。在每一小節我會隨機引入一些問題。由於這方面學習材料太豐富了,本文並未涵括所有內容。github/rhiever/Data-Analysis-and-Machine-Learning-Projects/blob/master/example-data-science-notebook/Example Machine Learning Notebook.ipynb2、實例小白如何用python
  • MIT大牛Gilbert Strang新書:《線性代數與從數據中學習》搶先看
    這本新書名叫Linear Algebra and Learning from Data(《線性代數與從數據中學習》),面向有一定基礎、想進階線性代數技能的同學。此次教授親自出馬再推新書,號召力非常強大。微博科技博主@愛可可-愛生活推薦後短短幾個小時,已經有200多人轉發。
  • 慢步學習,python語言編程,來扯扯語言的學習理解
    程式語言的學習,也在於累積程式語言語句的使用情景和效果。因此學習編程最有效的方式就是編寫實例程序。不在於程序的完備,在於理解程序原始碼的適用場景和效果。例如筆者之前寫的一個實例代碼對於編程老鳥筆者不敢說啥,但對於初學者,這樣的例子,真的很實用,簡短,容易理解,還具備一定的功能。
  • 學習Python對辦公真的有用嗎?用經驗告訴你答案
    他們會在廣告文章或者視頻中突出這麼一點:同事下班比我早,就是因為用了python辦公;面對海量數據和文檔要整理,我卻無能為力,但是用了python便可以快速搞定;學習一種程式語言,可以讓自己的職業發展更加有力。不得不說,現在的廣告很能抓住人的心理,學習python可以讓職業發展更加順暢這一點確實擊中我了。
  • 機器學習中的線性代數:關於常用操作的新手指南
    大數據文摘作品,轉載要求見文末編譯 | 沈愛群,徐凌霄,Aileen在學習深度學習的課程時,數學知識十分重要,而如果要挑選其中最相關的部分,「線性代數」首當其衝。如果你也跟本文作者一樣,正在探索深度學習又困於相關數學概念,那麼一定要讀下去,這是一篇介紹深度學習中最常用線性代數操作的新手指南。在深度學習中,線性代數是一個非常有用的數學工具,提供同時操作多組數值的方法。
  • 成都學習Python開發哪家好
    如何選擇成都python培訓機構? python程式語言語法清晰、乾淨、易讀、易維護、代碼量小、可讀性強。當團隊合作開發時,閱讀別人的代碼將是非常迅速和高效的。通俗說來就是「寫起來快、看起來明白!」所以近年來,python開發非常流行。
  • Python學習步驟
    Python10大特點:易於學習:Python有相對較少的關鍵字,結構簡單,和一個明確定義的語法,學習起來更加簡單。易於閱讀:Python代碼定義的更清晰。易於維護:Python的成功在於它的原始碼是相當容易維護的。一個廣泛的標準庫:Python的最大的優勢之一是豐富的庫,跨平臺的,在UNIX,Windows和Macintosh兼容很好。互動模式:互動模式的支持,您可以從終端輸入執行代碼並獲得結果的語言,互動的測試和調試代碼片斷。
  • 學習人工智慧需要哪些必備的數學基礎?
    學習人工智慧該從哪裡開始呢?人工智慧的學習路徑又是怎樣的?   數學基礎知識蘊含著處理智能問題的基本思想與方法,也是理解複雜算法的必備要素。今天的種種人工智慧技術歸根到底都建立在數學模型之上,要了解人工智慧,首先要掌握必備的數學基礎知識,具體來說包括:   線性代數:如何將研究對象形式化?   概率論:如何描述統計規律?   數理統計:如何以小見大?   最優化理論: 如何找到最優解?
  • 「python學習手冊-筆記」003.數值類型
    003.數值類型本系列文章是我個人學習《python學習手冊(第五版)》的學習筆記,其中大部分內容為該書的總結和個人理解,小部分內容為相關知識點的擴展。非商業用途轉載請註明作者和出處;商業用途請聯繫本人(gaoyang1019@hotmail.com)獲取許可。