透過 NumPy

摘要

使用 Python 來認識向量一文中我們已經暸解怎麼在 Python 中使用繪圖函數描繪向量、進行向量運算以及計算向量度量;這篇文章我們聚焦兩個維度的 ndarray:矩陣(matrix),暸解怎麼在 Python 中進行矩陣運算、熟悉矩陣運算的特性與特殊矩陣;如果對 NumPy、ndarray 或向量這些名詞感到陌生,可以閱讀 Pyradise 的前導文章:

文章所有的程式、資料與輸出結果,都可以在這個 Google Colaboratory文件中檢視,喜歡英文介面的讀者,可點選幫助,再點選查看英文版


Matrix 或 ndarray?

矩陣指的是外觀為 m x n 的二維資料,位於矩陣中的元素則以 ij 表示,例如 A 是一個 3 x 4 的矩陣,其中 aij = i + j

在 NumPy 套件中若想要建立二維資料,我們可以使用兩種不同的型別,一種是前述所使用的 ndarray、另一種則是 matrix。

那麼究竟該使用 ndarray 或是 matrix?根據官方文件 NumPy for Matlab users 的建議,使用 ndarray!因為有著以下幾個優點:

  • 能夠表示向量、矩陣與張量
  • 許多 NumPy 的函數輸出型別為 ndarray 而非 matrix
  • ndarray 進行元素級別運算與線性代數運算時使用的運算符號有明顯區隔

有鑑於此,本文均採用 ndarray 來探索矩陣的運算與特性。


矩陣與矩陣的加減

矩陣 A 與矩陣 B 相加減時,將 aijbij 在對應位置相加減。

Linear Algebra for Dummies

矩陣的加法具有交換律,而減法不具有交換律,這點跟純量(scalar)相同,像是 8+7 與 7+8 相等,但是 8–7 與 7–8 不相等。我們可以使用 np.array_equal() 來判斷兩個 ndarray 是否相等。

## True
## False

矩陣的加法與減法具有結合律。

## True

矩陣與純量相乘

矩陣 A 與純量 k 相乘即將所有的 aij 都乘上 k

Linear Algebra for Dummies

矩陣與矩陣相乘

並非任意兩個矩陣都能夠相乘,如果矩陣 A 的外觀為 m x n、矩陣 B 的外觀為 p x q,n 與 p 要相等, A * B 才能夠運算,A * B 的外觀為 m x q。直接使用 * 會進行元素級別的乘法,必須特別使用 ndarray 的 .dot() 方法或者 np.dot() 函數來實現矩陣與矩陣的相乘。

Linear Algebra for Dummies

多數的情況下,矩陣與矩陣相乘時不具有交換律。

## False

矩陣相乘具有結合律。

## True

矩陣相乘具有分配律。

## True

特殊的矩陣

  • 單位矩陣(Identity Matrix):以大寫英文字母 I 表示,NumPy 建立單位矩陣的方法是 np.eye() 取 I 與 Eye 諧音。是對角線上為 1 其餘位置為 0 的矩陣。

矩陣與矩陣相乘在特殊情況下具有交換律,矩陣與單位矩陣相乘就符合這個情況。

## True
  • 轉置矩陣(Transpose):將矩陣 A 中每個數字從 (m, n) 的位置轉換到 (n, m) 後所呈現的矩陣 B 即稱為矩陣 A 的轉置矩陣,NumPy 建立轉置矩陣是使用 ndarray 的 .T 屬性。

矩陣 A 與矩陣 B 相加後轉置,與先轉置矩陣 A 與矩陣 B 後再相加是相同的。

Linear Algebra for Dummies
## True

矩陣 A 與矩陣 B 相乘後轉置,與矩陣 B 轉置再乘矩陣 A 轉置的結果相同。

Linear Algebra for Dummies
## True
  • 反矩陣(Inverse):如果矩陣 M 是一個可逆矩陣(invertible),則矩陣 M 與其反矩陣相乘之後可以得到一個單位矩陣
Linear Algebra for Dummies
Linear Algebra for Dummies

NumPy 使用 np.linalg.inv() 函數可以計算反矩陣。

並不是每個矩陣都具有反矩陣,以前述 2 x 2 的矩陣 M 為例,當 ad-bc 為零的時候,矩陣 M 就稱為不可逆(singular)矩陣,呼叫 np.linalg.inv() 會產生錯誤:

## 矩陣 B 是不可逆矩陣

如果您喜歡這篇文章,請多「拍手」幾次、分享到社群網站以及訂閱 Pyradise追蹤更多 Python 資訊,請關注 Pyradise 的臉書粉絲專頁!🙏想看影音教學?🎥
我們將在 Pyradise 的 Youtube 頻道,定期跟大家直播分享相關心得!
訂閱我們!👇👇👇

Pyradise

在 Py 樂園輕鬆學習 Python。

郭耀仁 Yao-Jen Kuo

Written by

Could that data be any tidier? It is always nice to meet a data enthusiast / 2:43 marathon runner.

Pyradise

Pyradise

在 Py 樂園輕鬆學習 Python。

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade