什麼是NumPy?
NumPy(Numerical Python) 是 Python 語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。
NumPy 的前身 Numeric 最早是由 Jim Hugunin 與其它協作者共同開發,2005 年,Travis Oliphant 在 Numeric 中結合了另一個同性質的程序庫 Numarray 的特色,並加入了其它擴展而開發了 NumPy。NumPy 為開放源代碼並且由許多協作者共同維護開發。
NumPy 是一個運行速度非常快的數學庫,主要用於數組計算,包含:
- 一個強大的N維數組對象 ndarray
- 廣播功能函數
- 整合 C/C++/Fortran 代碼的工具
- 線性代數、傅里葉變換、隨機數生成等功能
特徵值和特徵向量的定義
設A是n階方陣,如果數λ和n維非零列向量x使關係式Ax=λx成立,那麼這樣的數λ稱為矩陣A特徵值,非零向量x稱為A的對應於特徵值λ的特徵向量。式Ax=λx也可寫成( A-λE)X=0。這是n個未知數n個方程的齊次線性方程組,它有非零解的充分必要條件是係數行列式| A-λE|=0。
特徵值 是方程式Ax=ax的標量解(scalar solutions),其中A是一個二維矩陣,而x是一維向量。 特徵向量 實際上就是表示特徵值的向量。
提示:
特徵值和特徵向量都是基本的數學概念,並且常用於一些重要的算法中,如 主成分分析(PCA) 算法。PCA可以極大地簡化大規模數據集的分析過程。
用NumPy進行計算
計算特徵值時,可以求助於numpy.linalg程序包提供的eigvals()子例程。函數eig()的返回值是一個元組,其元素為特徵值和特徵向量。
可以用子程序包numpy.linalg的eigvals()和eig()函數來獲得矩陣的特徵值和特徵向量,並通過dot()函數(詳見本書對應的eigenvalues.py文件)來驗算結果。
import numpy as np
A = np.mat("3 -2;1 0")
print "A\\n", A
print "Eigenvalues", np.linalg.eigvals(A)
eigenvalues, eigenvectors = np.linalg.eig(A)
print "First tuple of eig", eigenvalues
print "Second tuple of eig\\n", eigenvectors
for i in range(len(eigenvalues)):
print "Left", np.dot(A, eigenvectors[:,i])
print "Right", eigenvalues[i] * eigenvectors[:,i]
下面來計算一個矩陣的特徵值。
1.創建矩陣。
下列代碼將創建一個矩陣:
A = np.mat("3 -2;1 0")
print "A\\n", A
下面的矩陣即剛才創建的矩陣。
<code>A
[[ 3 -2]
[ 1 0]] /<code>
2.利用e``ig()函數計算特徵值。
這時,我們可以使用eig()子例程:
print "Eigenvalues", np.linalg.eigvals(A)
該矩陣的特徵值如下:
Eigenvalues [ 2. 1.]
3.利用eig()``函數取得特徵值和特徵向量。
利用eig()函數,可以得到特徵值和特徵向量。注意,該函數返回的是一個元組,其第一個元素是特徵值,第二個元素為相應的eigenvectors,其以面向列的方式 排列:
eigenvalues, eigenvectors = np.linalg.eig(A)
print "First tuple of eig", eigenvalues
print "Second tuple of eig\\n", eigenvectors
特徵值eigenvalues和特徵向量eigenvectors的值為:
First tuple of eig [ 2. 1.]
Second tuple of eig
[[ 0.89442719 0.70710678]
[ 0.4472136 0.70710678]]
4.驗算結果。
通過dot()函數計算特徵值方程式Ax = ax兩邊的值,就可以對結果進行驗算:
for i in range(len(eigenvalues)):
print "Left", np.dot(A, eigenvectors[:,i])
print "Right", eigenvalues[i] * eigenvectors[:,i]
輸出內容如下所示:
Left [[ 1.78885438]
[ 0.89442719]]
Right [[ 1.78885438]
[ 0.89442719]]
Left [[ 0.70710678]
[ 0.70710678]]
Right [[ 0.70710678]
[ 0.70710678]]
想要更多Python學習數學,請點擊。
閱讀更多 python小白社區 的文章