矩阵论
点积
也称内积,两个向量做完点积,结果是一个标量。
令向量x为:
x=[x1x2...xn]
x=[x_1 x_2 ... x_n]
x=[x1x2...xn]
向量y为:
y=[y1y2...yn]
y=[y_1 y_2 ... y_n]
y=[y1y2...yn]
则点积为:
dot(x,y)=xyT=[x1y1x2y2...xnyn]
dot(x,y)=xy^T=[x_1y_1\quad x_2y_2\quad ...\quad x_ny_n]
dot(x,y)=xyT=[x1y1x2y2...xnyn]
点积的python代码样例:
import numpy as np
def test_dot():
a = np.array([1, 3, 4])
b = np.array([2, 2, 3])
#结果均为20
print np.dot(a,b.T)
print np.dot(a,b)
不管做不做转置,numpy算出的均为标量结果。
正交向量
两个向量的点积为0,则它们互为正交向量。
模
模是向量的长度。
向量
x=[x1x2...xn]
x=[x_1 x_2 ... x_n]
x=[x1x2...xn]
的模为:
∣x∣=x12+x22+...+xn2
|x|=\sqrt{x_1^2+x_2^2+...+x_n^2}
∣x∣=x12+x22+...+xn2
标准正交基
内积空间的一组向量,满足:
- 两两正交(即内积为0)
- 每个向量的模为1
称为标准正交基。
正交矩阵
满足
AAT=I
AA^T=I
AAT=I
的矩阵A为正交矩阵,I为单位矩阵。
正交矩阵有如下性质:
- A转置也是正交矩阵
- A的各行是单位向量且两两正交
- A的各列是单位向量且两两正交
- |A|=1
- A的逆为A的转置
特征值和特征向量
设A是n阶方阵,如果数λ和n维非零列向量x使关系式
Ax=λx
Ax=\lambda{x}
Ax=λx
成立,那么这样的数λ称为矩阵A的特征值(eigenvalue),非零向量x称为A对应于特征值λ的特征向量。
注意:λ是一个数值,而非向量!
一个矩阵可能有多个特征值。
python实现(使用linalg.eig方法):
import numpy as np
def test_eig():
A = np.array([[1, -3, 3], [3, -5, 3], [6, -6, 4]])
a,b = np.linalg.eig(A)
print 'value:%s' % a[0]
print 'vector:%s' % b
# (A-λ)x = 0,此处结果应该是个0矩阵
print np.dot(A - a[0] * np.identity(3), b[:,0])
特征分解
假设A为n*n矩阵,特征值为:
λ1λ2...λn
\lambda_1 \lambda_2 ...\lambda_n
λ1λ2...λn
特征向量为:
x1x2...xn
x_1 x_2 ... x_n
x1x2...xn
令特征向量构成的矩阵为Q,即:
Q=[x1x2...xn]
Q=[x_1 x_2 ... x_n]
Q=[x1x2...xn]
则有:
AQ=A[x1x2...xn]=[Ax1Ax2...Axn]=[λ1x1λ2x2...λnxn]=[x1λ1x2λ2...xnλn]=[x1x2...xn][λ10...00λ2...000...λn]=QΛ AQ=A[x_1 x_2 ... x_n]=[Ax_1\quad Ax_2 ... \quad A x_n]=[\lambda_1x_1\quad \lambda_2x_2 ... \quad \lambda_nx_n] \\=[x_1\lambda_1\quad x_2\lambda_2 ... \quad x_n\lambda_n]=[x_1 x_2 ... x_n]\left[ \begin{matrix} \lambda_1 & 0 & ... & 0 \\ 0 & \lambda_2 & ... & 0 \\ 0 & 0 & ... & \lambda_n \end{matrix} \right]\\=Q\Lambda AQ=A[x1x2...xn]=[Ax1Ax2...Axn]=[λ1x1λ2x2...λnxn]=[x1λ1x2λ2...xnλn]=[x1x2...xn]λ1000λ20.........00λn=QΛ
其中:
Λ=[λ10...00λ2...000...λn] \Lambda=\left[ \begin{matrix} \lambda_1 & 0 & ...& 0 \\ 0 & \lambda_2 & ...& 0 \\ 0 & 0 & ...& \lambda_n \end{matrix} \right] Λ=λ1000λ20.........00λn
则:
A=QΛQ−1(1)
A=Q\Lambda Q^{-1} \tag{1}
A=QΛQ−1(1)
式(1)称之为矩阵A的特征值分解(Eigen decomposition ),也称为谱分解(Spectral decomposition )。
特别的,对于实对称矩阵(元素为实数,且转置为自身),其所有的特征向量是正交的,并做归一化,式(1)可变成:
A=QΛQT
A=Q\Lambda Q^T
A=QΛQT
python实现:
import numpy as np
def test_eig():
A = np.array([[1, -3, 3], [3, -5, 3], [6, -6, 4]])
a,q = np.linalg.eig(A)
# 结果就为A
print np.dot(np.dot(q, np.diag(a)), np.linalg.inv(q))
特征值的意义
可以把特征向量看做投影坐标,把特征值看做投影后的振幅,振幅越大,说明投影效果越好。
奇异值分解(SVD,Singular Value Decomposition)
奇异值分解是特征值分解在任意矩阵上的推广。