清華學霸筆記——Python下的矩陣定義(下)

2021-01-08 Ai算法詞典

關鍵詞:線性代數 / 矩陣 / 基本定義

矩陣對於算法就如同人對於食物般的關係,已經到了密不可分的狀態了,在神經網絡裡,矩陣代表了每層神經元之間的連結,在集成算法裡,矩陣記錄了每次分類器更新的殘差,在馬可夫鏈裡,矩陣表示了不同狀態下的條件轉移概率,矩陣的重要性已經是不言自明了。除了上集說到的方陣,子矩陣,對角矩陣,與單位矩陣之外,接著要進一步介紹一些常用且方便的矩陣,包含了以下幾種矩陣類型:

· 純量矩陣

· 三角矩陣

· 共軛矩陣

· 對稱矩陣

· 正交矩陣

當然矩陣的類型遠不止如此,而這幾種矩陣在了解的時候不需要太多先驗知識,因此才能在一開始率先登場!

矩陣基本定義

這篇文章裡的範例也都將沿用上篇文章中的定義,下面就來回顧一下標記符號的各種含義。

中的 稱為矩陣的元素,可以是數字,函數,實數,複數。在 python 代碼中的numpy模塊幾乎可以說是數值計算的唯一選擇。

import numpy as np

A = np.random.randint(0, 10, 72)

A = A.reshape(9, 8)

print(A)

輸出:

[[5 4 5 8 5 7 0 7]

[5 6 4 0 9 8 6 5]

[1 2 9 6 7 7 3 5]

[3 4 7 8 4 6 9 2]

[4 8 1 3 5 4 8 4]

[5 1 5 7 3 9 9 8]

[0 8 4 1 6 9 3 2]

[4 3 0 3 6 4 5 9]

[2 8 6 3 5 5 3 4]]

如果還沒安裝過numpy,可以使用下面指令在終端快速安裝。

pip install numpy

11. 純量矩陣 - Scalar matrix

在對角矩陣中,主對角線上的元素皆為某一常數 C 時,則稱之為純量矩陣。

c = 5

print(np.diag([c, c, c]))

輸出:

[[5, 0, 0],

[0, 5, 0],

[0, 0, 5]]

12. 上三角矩陣 - Upper triangular matrix

在方陣的前提下,主對角線以下元素皆為 0 時,則稱之為上三角矩陣。

print(np.triu(A))

輸出:

[[5, 4, 5, 8, 5, 7, 0, 7],

[0, 6, 4, 0, 9, 8, 6, 5],

[0, 0, 9, 6, 7, 7, 3, 5],

[0, 0, 0, 8, 4, 6, 9, 2],

[0, 0, 0, 0, 5, 4, 8, 4],

[0, 0, 0, 0, 0, 9, 9, 8],

[0, 0, 0, 0, 0, 0, 3, 2],

[0, 0, 0, 0, 0, 0, 0, 9],

[0, 0, 0, 0, 0, 0, 0, 0]]

p.s. 即便一個矩陣不是方陣,同樣可以取上下三角矩陣。

13. 下三角矩陣 - Lower triangular matrix

在方陣的前提下,主對角線以上元素皆為 0 時,則稱之為下三角矩陣。

print(np.tril(A))

輸出:

[[5, 0, 0, 0, 0, 0, 0, 0],

[5, 6, 0, 0, 0, 0, 0, 0],

[1, 2, 9, 0, 0, 0, 0, 0],

[3, 4, 7, 8, 0, 0, 0, 0],

[4, 8, 1, 3, 5, 0, 0, 0],

[5, 1, 5, 7, 3, 9, 0, 0],

[0, 8, 4, 1, 6, 9, 3, 0],

[4, 3, 0, 3, 6, 4, 5, 9],

[2, 8, 6, 3, 5, 5, 3, 4]]

14. 共軛矩陣 - Conjugate matrix

把 A 矩陣的元素皆取共軛複數後,該新的矩陣為 A 矩陣的共軛矩陣,以 表示。

B = np.array([[1+1.j, 2-1.j],

[3-2.j, 4+5.j]])

print(np.conj(B))

輸出:

[[1.-1.j, 2.+1.j],

[3.+2.j, 4.-5.j]]

15. 轉置矩陣 - Transpose matrix

把 A 矩陣中的行列編號互換,元素不變,只變位置後的結果稱為 A 矩陣的轉置矩陣,以 表示。

print(A.T)

輸出:

[[5, 5, 1, 3, 4, 5, 0, 4, 2],

[4, 6, 2, 4, 8, 1, 8, 3, 8],

[5, 4, 9, 7, 1, 5, 4, 0, 6],

[8, 0, 6, 8, 3, 7, 1, 3, 3],

[5, 9, 7, 4, 5, 3, 6, 6, 5],

[7, 8, 7, 6, 4, 9, 9, 4, 5],

[0, 6, 3, 9, 8, 9, 3, 5, 3],

[7, 5, 5, 2, 4, 8, 2, 9, 4]]

16. 共軛轉置矩陣 - Conjugate transpose matrix

把 A 矩陣的元素皆取共軛複數後,再取轉置;或將 A 矩陣的元素先取轉置後,再取共軛複數,所得到的新矩陣即為共軛轉置矩陣,以 表示。

print(np.matrix(B).H)

輸出:

matrix([[1.-1.j, 3.+2.j],

[2.+1.j, 4.-5.j]])

print(np.conj(B).T)

輸出:

[[1.-1.j, 3.+2.j],

[2.+1.j, 4.-5.j]]

17. 對稱矩陣 - Symmetrix matrix

在方陣的前提下,如果矩陣 A 的轉置等於 A 本身,稱之為對稱矩陣。

def symmetrixIO(mat):

return np.sum(mat != mat.T) == 0

print(symmetrixIO(C))

輸出:

False

18. 反對稱矩陣 - Skew symmetrix matrix

在方陣的前提下,如果矩陣 A 的轉置矩陣恰為 A 的相反矩陣 -A,則稱之為反對稱矩陣。

def skew_symmetrixIO(mat):

return np.sum(-mat != mat.T) == 0

print(skew_symmetrixIO(

np.array([[ 0, 2, 5],

[-2, 0, -7],

[-5, 7, 0]])

))

輸出:

True

19. 厄米特矩陣 - Hermitian matrix

在方陣的前提下,矩陣 A 的共軛轉置矩陣恰好等於原矩陣 A,則稱之為厄米特矩陣。

def hermitianIO(mat):

return np.sum(mat != np.conj(mat).T) == 0

print(hermitianIO(

np.array([[ 1, 1+1.j, 5],

[1-1.j, 2, 1.j],

[ 5, -1.j, 7]])

))

輸出:

True

20. 正交矩陣 - Orthogonal matrix

正交的意思就是指兩個向量彼此互相垂直,而正交矩陣則進一步把垂直的概念拓展到矩陣中,矩陣裡的每一個行和列向量必須彼此互相垂直,而且向量長度是1的情況下,才稱之為正交矩陣。總結矩陣的規則後,我們得到在方陣的前提下,滿足以下條件則稱之為正交矩陣:

因此很明顯的,一個正交矩陣必定是個方陣,而這一系列的條件判斷同樣可以被寫成一個函數用來檢測矩陣是否正交。

from Code.linalg import *

def orthogonalIO(mat, decimal=4):

# A^T = A^(-1)

cond1 = np.sum(np.round(mat.T, decimal) !=

np.round(inverse(mat), decimal)) == 0

# A^T . A = A . A^T

cond2 = np.sum(np.round(np.dot(mat.T, mat), decimal) !=

np.round(np.dot(mat, mat.T), decimal)) == 0

# |A| = +-1

cond3 = np.round(np.abs(determinant(mat)), decimal) == 1

return np.sum([cond1, cond2, cond3]) == 3

B = np.array([[-0.23939017, 0.58743526, -0.77305379],

[ 0.81921268, -0.30515101, -0.48556508],

[-0.52113619, -0.74953498, -0.40818426]])

print(orthogonalIO(B, decimal=4))

輸出:

True

為了更深入了解矩陣的底層運算,行列式值和逆矩陣都用的是我們自定義的函數,如果想看具體實現方法,歡迎持續關注發布的文章!在這個函數中我們首先就遇到了一個很簡單的理論與實際代碼之間的差異,那就是小數點近似問題。由於任意行列向量必須是單位向量,常常在實際情況是一個近似的結果,因此在檢測正交與否的時候也必須採用近似的方式操作。

相關焦點

  • 這裡有一份清華學生的筆記還請各位欣賞!不愧是清華大學的學霸!
    在最近清華大學校史館舉行的「清華大學優良學風檔案史料展」中,我們可以通過其中的一些展品,一睹清華學子的優秀,在觀看這些優秀的筆記,作業和學習計劃的時候,編者不僅感慨,這些人不進清華大學,誰才配呢?究竟這些筆記和學習計劃有多優秀,還請各位讀者慢慢欣賞!
  • 清華高分學霸透露:之所以高考物理不扣一分,這份筆記功不可沒
    清華高分學霸透露:之所以高考物理不扣一分,這份筆記功不可沒同學們初二會學習一門新的學科—物理,剛開始的時候很多同學會認為物理非常好學,新奇的實驗現象,簡單明了的公式定理,而且還能將物理知識巧妙地運用到生活當中。
  • Python的武器庫05:numpy模塊(下)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以有這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。
  • 719分清華學霸:給初中生的1份手寫筆記!孩子掌握,生物一分不丟
    719分清華學霸:給初中生的1份手寫筆記!今天老師特意分享了一份清華學霸的生物筆記,這份筆記是包括了初中所有生物的知識點細緻到了每個章節,如果說你喜歡生物,或者說你打算在高中要選修生物的同學,一定要把這份知識點收藏下來,多看一看,看一看學霸到底是怎麼學習生物這門學科的。
  • Numpy基礎,一位Python大神的筆記,看了後我連Matlab都學會了!
    所以本文作為一個記錄&筆記,文章內容大多數取自網絡以&官網快速入門等,希望可以幫助大家快速入門Numpy。如果你有Matlab基礎,那麼你能很快看懂本文!(私信小編007即可獲取Python視頻教程以及各類PDF!)一個慄子
  • 清華學霸作息表:一整天時間安排得滿滿當當
    近日,一份清華大學在微博曬出的清華學生的計劃表衝上熱搜,引發熱議。  據清華大學官博介紹,這份#清華學生的計劃表  展覽展出了很多清華畢業生和在校生的筆記、作業、計劃等,字跡工整、思路清晰,這樣學習怎能不優秀!
  • Python求解特徵向量和拉普拉斯矩陣
    學過線性代數和深度學習先關的一定知道特徵向量和拉普拉斯矩陣,這兩者是很多模型的基礎,有著很重要的地位,那用python要怎麼實現呢?numpy和scipy兩個庫中模塊中都提供了線性代數的庫linalg,scipy更全面些。
  • 學習筆記,從NumPy到Scrapy,學習Python不能錯過這些庫
    在網絡上看到幾位前輩寫了關於python深度學習庫的文章,對於小小白來說,因為我剛開始學python,我得承認自己看完後依然覺得雲裡霧裡的,不知道這些庫到底對我有什麼用處。所以我到網絡上搜集補充關於這些庫的說明內容,感覺在這個整理資料的過程中,對於這些python程序庫了解了更多,以下是我整理的學習筆記。
  • Python裡簡單的矩陣操作
    Python比較牛的一個地方就是庫比較多,數據操作方便,下面的幾個例子是對矩陣的操作1、構建一個矩陣由上圖可見,reshape(3,5)就能構建一個3×5的矩陣2、隨機數生成一個矩陣3 、起始值為0,終點值為2×pi,總共100個值
  • 初中化學:學霸筆記「精華版」,給孩子複印一份,考試回回不下98
    初中化學:學霸筆記「精華版」,給孩子複印一份,考試回回不下98!今天老師整理了初中化學學霸筆記精華版,都是初中化學所涉及到的重點內容,也是同學習學習的難點知識,建議家長們直接給孩子複印一份,讓孩子利用假期的時間多讀聯繫,我相信這對於提高孩子的綜合能力會有很大的幫助,考試回回不下98!文末有word資料的領取方式!
  • 當清華學霸博士與抖音化學反應,氫氦鋰鈹硼也浪漫
    高錳酸鉀在鹼性條件下會發生什麼過程和現象?有種做題的痛,是學渣看到題目就暈乎。然而這些課堂上集中精力都難以啃下的知識點,被一位90後清華學霸,做成短視頻教學。抖音上@教化學的清華博士汪,用精心剪輯配樂過的化學實驗,帶領71萬粉絲走入有趣的化學世界,以及大家最好奇的清華生活。
  • 清華學霸演講:哪有天生學霸 一切都是厚積薄發
    不少小夥伴感慨良多,默默放下了手機:所謂天生學霸,不過是厚積薄發!這段視頻的演講者狄迪,是清華大學碩士生。他通過幾位學霸同學的事跡,向我們展示出清華人敢於擔當、自信的一面。短短11分鐘視頻,你可以迅速接觸到數位清華學霸!厲害了,學霸!
  • 如何在黎曼意義下定義相關矩陣的內均值?
    這兩個黎曼矩陣在非常相似的空間(高斯分布的密度是用相同的均值進行參數化,協方差可以識別到協方差矩陣中)上的這種聯繫通過Fréchet-Darmois-Cramér-Rao不等式給出了很好的統計解釋:黎曼矩陣引起的協方差矩陣空間的曲率是統計估計不確定性的簡單函數。
  • 考上清華北大的都是什麼樣的人?學霸的成功無法複製,但可以...
    考上清華北大的都是什麼樣的人?「神一般的存在!」「平時玩遊戲,周末搞競賽。學習比你少,效率比你高。」「一種是天才型學霸,一種是學習有方法、刻苦努力,善於考試的學霸」清華、北大一直是許多學子的夢想,小星所在的縣城,一年有一個考上,都要拉橫幅慶祝。
  • 初中化學,學霸筆記,考試必備
    首先,我們看看他們的筆記,學霸的筆記!初中所有的化學知識都有筆記記錄著,重點難點,一目了然,讓學習複習時刻都是清晰明了的。看看他們的筆記,再對比我們的筆記,或許能找到不同的地方,取長補短,讓自己成為下一個學霸!資料最後還有考試的技巧和方法,讓同學們在熟悉知識的同時,也學習解題的方法,讓題目不再是我們的「敵人」。
  • 你與學霸的距離,可能就差了一本筆記
    大學課堂,三成學生記筆記  你與學霸的距離,可能就差了一本筆記   重郵展出60本學霸筆記,引導「讓課堂回歸常識」;同學們借閱學習,十分受益團隊一位同學介紹,研究生很少記課堂筆記,他們要閱讀大量論文,常用思維導圖來展示知識框架。在繪製過程中,會藉助imind軟體等讓結構圖看起來賞心悅目,還能將電子版在網上分享。  為何要展出學霸筆記?  讓課堂回歸常識  昨日上午9:40,大課間,同學們爭先恐後來到筆記展示區取閱、學習。  為什麼要送這份開學禮物呢?
  • 資源|用Python和NumPy學習《深度學習》中的線性代數基礎
    作者按照這本書的第二章的線性代數內容來逐一介紹機器學習中的線性代數基礎,讀者可以在原書、中譯版或中文筆記中查看每個小節的基礎介紹,或直接參考該博客的推導部分。作者除了對部分概念進行詳細推導之外,還添加了多個示例,並給出了 python/numpy 的實現代碼。
  • blender python處理矩陣乘法變更符號
    如果對矩陣對象執行任何乘法,要注意一件事情,Python 的最新版本(當然還有包含Blender內置Python版本)為適當的矩陣乘法實現了新的表示方法。用blender腳本編寫器編寫任何矩陣乘法,乘法* 語法仍然有效,這個只能作為 2.8 中嘗試普通乘法,而不是 2.7 中的矩陣乘法。如果你用在矩陣乘法會報出有趣的錯誤,因為這並不一定會拋出一個錯誤,a * ba @ b想要支持 2.7 和 2.8 的相同矩陣乘法樣式?首先,這似乎是一個類似的挑戰,採用前面幾節中提到的欄位注釋。
  • 你會記筆記嗎?你與學霸的距離,可能就差本筆記
    新學期,重慶郵電大學為學子們送上一份別致的開學禮物——第三、第四教學樓和圖書館大廳展示了60本統一裝訂、書寫工整、條理清晰、歸納得當、圖文並茂、內容擴展的學霸筆記。  「筆尖上的記憶——重郵學生優秀筆記展」讓同學們十分震驚,也十分受益。  為何他們能考99分?
  • 線性代數的第一堂課──矩陣乘法的定義
    1857年,英國數學家凱萊(Arthur Cayley)發表一篇被後世公認為近代矩陣理論和線性代數基石的論文〈矩陣理論備忘錄〉( A Memoir on the Theory of Matrices ),他將矩陣從行列式抽離出來,視之為另一個數學物件,並且定義完備的矩陣代數運算。