使用Python解線性代數(Linear Algebra)的問題

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

這裡會使用到NumPy套件,請讀者先行安裝。首先來看看怎麼使用NumPy定義一個矩陣:
# Matrix A
A = np.array(
[
[1, 2, 4],
[5, 3, 6],
[8, 9, 7]
])
# Matrix B
B = np.array(
[
[7, 8, 9],
[6, 5, 4],
[3, 1, 1]
])

上面的程式碼含有兩個矩陣A與B,接著我們可以使用Python的運算子:+, -, *, / ,來對矩陣的元素做加減乘除運算。
# Matrix operations
print("A + B")
print(A + B)
print("A - B")
print(A - B)
print("A * B")
print(A * B)
print("A / B")
print(A / B)

好,那我們先來解個線性方程式(下圖取自Wiki):


{\begin{alignedat}{7}3x&&\;+\;&&2y&&\;-\;&&z&&\;=\;&&1&\\2x&&\;-\;&&2y&&\;+\;&&4z&&\;=\;&&-2&\\-x&&\;+\;&&{\tfrac {1}{2}}y&&\;-\;&&z&&\;=\;&&0&\end{alignedat}}
# Matrix A
A = np.array(
[
[3, 2, -1],
[2, -2, 4],
[-1, 0.5, -1]
])
# Matrix B
B = np.array(
[1, -2, 0]
)
print("Solution:")
print(np.linalg.solve(A, B))

上面的程式碼中的np.linalg.solve(A, B) 就可以幫我們解出這個線性方程式的解,是不是很方便呢?除了solve這個方便的function之外,NumPy還提供了很多常用的線性代數函數:

  1. dot:內積。
  2. trace: 計算對角線元素的和。
  3. det:計算行列式的值。
  4. eig:求出eigenvalue與eigenvector。
  5. inv:求出逆矩陣
  6. qr:QR分解
  7. svd:SVD分解
  8. solve:解線性方程式。

那這些線性代數的方法可以用在什麼地方呢?以現在的聊天機器人來說,有用SVD為基礎來做文字語意的分析。此外,線性代數也是深度學習(MIT出版的Deep Learning一書的第二章)的數學基礎之一。那為什麼在使用電腦做運算時,線性代數會有很大的關連?

沒有留言: