矩阵等式 matrix identity(numpy仿真)
2016-01-08 17:44
591 查看
一、矩阵乘法
Ci,j=A[i]TB[:,j]A 的第 i 行,B 的第 j 列的内积。
所以考虑如下的标量形式:
∑i∑jαiαjzTizj
自然可以化为:
∑i∑jαiαjKij=αTKα
A = np.random.randint(0, 5, (3, 4)) B = np.random.randint(0, 5, (4, 3)) C = A.dot(B) i, j = 2, 1 print(A[i].dot((B[:, j])) == C[i][j])
二、矩阵的迹
∑ixTiAxi=tr(A∑ixixTi)=tr(AXXT)import numpy as np def main(): X = np.random.randn(10, 3) A = np.random.randn(3, 3) sum1 = 0 for i in range(X.shape[0]): sum1 += np.dot(X[i, :], np.dot(A, X[i, :].T)) sum2 = np.trace(np.dot(A, np.dot(X.T, X))) print(sum1) # 10.158513956 print(sum2) # 10.158513956 if __name__ == '__main__': main()
三、特征值分解
令 A 是一个 N×N的方阵, 且有 N个线性无关的特征向量 qi(i=1,2,…,N)。这样 A可被分解为:A=QΛQ−1⇓AQ=QΛ
>>> import numpy as np >>> A = np.random.randn(3, 3) >>> Lambda, Q = np.linalg.eig(A) # 其中Lambda是一维向量,由特征值构成 >>> np.dot(Q, np.dot(np.diag(Lambda), np.linalg.inv(Q))) array([[-0.15446862, -1.57279859, -0.28165496], [-0.99437763, -0.54065794, 0.75029032], [-0.49977911, 1.78752911, -1.17139559]]) >>> A array([[-0.15446862, -1.57279859, -0.28165496], [-0.99437763, -0.54065794, 0.75029032], [-0.49977911, 1.78752911, -1.17139559]]) >>> [np.linalg.norm(Q[:, i], 2) for i in range(Q.shape[1])] # 每一个特征向量的二范数, [0.99999999999999989, 1.0, 1.0] # 可见,numpy提供的特征分解已为我们做了特征向量的归一化
实对称矩阵不同的特征值对应的特征向量彼此正交(证明见 矩阵理论拾遗)。为了使用numpy线性代数工具箱进行测试,我们首先构造一个对称矩阵:
>>> import numpy as np >>> A = np.random.randn(3, 3) >>> A = np.triu(A) >>> A += (A.T-np.diag(A.diagonal())) >>> Lambda, Q = np.linalg.eig(A) >>> np.dot(Q.T, Q) [[ 1.00000000e+00 -3.88578059e-16 1.11022302e-16] [ -3.88578059e-16 1.00000000e+00 1.11022302e-16] [ 1.11022302e-16 1.11022302e-16 1.00000000e+00]]
实对称矩阵又可被分解为:
A=QΛQT
也即 QT=Q−1⇒QQT=I,Q 为正交矩阵(orthogonal matrix);
import numpy as np def main(): X = np.random.randn(10, 3) N = X.shape[0] C = np.dot(X.T, X)/N Lambda, Q = np.linalg.eig(C) print(np.dot(Q, Q.T)) print(np.dot(Q.T, Q)) if __name__ == '__main__': main()
QTQ=I,正交矩阵的行列式比为1或-1,
1=det(I)=det(QTQ)=det(QT)det(Q)=(detQ)2⇓det(Q)=±1
四、矩阵分块
C=1N∑xixTi=1NXXTimport numpy as np def main(): X = np.random.randn(10, 3) C = 0 N = X.shape[0] for i in range(N): C += np.dot(X[i][:, np.newaxis], X[i][np.nexaxis, :]) C /= N C2 = np.dot(X.T, X)/N print(C==C2) if __name__ == '__main__': main()
C=UΛUT=∑αλαuαuTα
五、二次型
二次型的结果是一个标量;xTAx=∑i,jxixjAij
import numpy as np def main(): x = np.array([1, 2, 3]) A = np.random.randn(3, 3) print(np.dot(x, np.dot(A, x))) s = 0 for i in range(A.shape[0]): for j in range(A.shape[1]): s += A[i, j]*x[i]*x[j] print(s) if __name__ == '__main__': main()
六、全1矩阵左乘一个矩阵 ≠ 右乘一个矩阵
[1,1,11]⋅[a11,a21,a12a22]=[11][1,1]⋅[a11,a21,a12a22]列和在重复;
[a11,a21,a12a22]⋅[1,1,11]=[a11,a21,a12a22]⋅[11]⋅[1,1]
行和在重复;
相关文章推荐
- 一个有用的python装饰器 -- 为执行程序加锁
- python3.5[No module named 'encodings']报错
- python实现base64加密/解密界面化小工具
- python 例子2: 利用 unittest 实现自动加载并执行它定义的方法
- python 例子: 实现动态加载类,并自动执行它定义的函数
- python random
- Python xml文件解析
- python---骰子游戏
- python 修正系统时差
- windows下python安装paramiko
- 手势识别模块+Python给PC增加点快捷键
- python图像处理库PIL高清晰保存缩放图片
- 1.4.1 STATIC FILES(静态文件)
- 【机器学习算法-python实现】协同过滤(cf)的三种方法实现
- Python -- 进阶
- Python 编写XML文件
- python3.5之mysql扩展
- python 字典(Directionary)
- python 元组(tuple)
- python 列表(Lists)