为了便于理解后续章节算法部分的讲解,本节将常用的矩阵数学公式和程序代码对应出来,读者可根据自己需求有选择的学习。因使用矢量编程的方法,矩阵的基本运算得到了较大的简化。
1.矩阵的初始化:
import numpy as np # 导入numpy包 1.1创建一个3*5的全零矩阵和全1矩阵 myZero = np.zeros([3,5]) # 3*5的全零矩阵 print myZero myOnes = np.ones([3,5]) # 3*5的全1矩阵 print myOnes 输出结果: [[ 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0.]] [[ 1. 1. 1. 1. 1.] [ 1. 1. 1. 1. 1.] [ 1. 1. 1. 1. 1.]] 1.2生成随机矩阵: myRand = np.random.rand(3,4) # 3行4列的0~1之间的随机数矩阵 print myRand 输出结果: [[ 0.79473503 0.4682515 0.53933591 0.94568244] [ 0.52199975 0.81190881 0.41920671 0.16756969] [ 0.57211218 0.53727222 0.83488426 0.30227915]] 1.3单位阵: myEye = np.eye(3) # 3*3的单位阵 print myEye 输出结果: [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]]
2.矩阵的元素运算:是指矩阵在元素级别的加、减、乘、除运算
from numpy import * #导入numpy包
2.1元素相加和相减:条件,矩阵的行数和列数必须相同
数学公式:
myOnes = ones([3,3]) # 3*3的全1矩阵 myEye = eye(3) # 3*3的单位阵 print myOnes+myEye # 矩阵相加 print myOnes-myEye # 矩阵相减 输出结果: [[ 2. 1. 1.] [ 1. 2. 1.] [ 1. 1. 2.]] [[ 0. 1. 1.] [ 1. 0. 1.] [ 1. 1. 0.]]
2.2矩阵数乘:一个数乘以一个矩阵
数学公式:
mymatrix = mat( [[1,2,3],[4,5,6],[7,8,9]]) a = 10 print a*mymatrix 输出结果: [[10 20 30] [40 50 60] [70 80 90]]
2.3矩阵所有元素求和:
数学公式:
mymatrix = mat([[1,2,3],[4,5,6],[7,8,9]] )
print sum(mymatrix)
输出结果:
45
2.4矩阵各元素的积:矩阵的点乘同维对应元素的相乘。当矩阵的维度不相同时,会根据一定的广播规则将维数扩充到一致的形式,
数学公式:(A.*B)ij = Aij* Bij mymatrix = mat( [[1,2,3],[4,5,6],[7,8,9]]) mymatrix2 = 1.5*ones([3,3]) print multiply(mymatrix,mymatrix2) 输出结果: [[ 1.5 3. 4.5] [ 6. 7.5 9. ] [ 10.5 12. 13.5]]
2.5 矩阵各元素的n次幂:n=2
数学公式:
mylist = mat( [[1,2,3],[4,5,6],[7,8,9]]) print power(mymatrix,2) 输出结果: [[ 1 4 9] [16 25 36] [49 64 81]]
4.矩阵的乘法:矩阵乘矩阵
数学公式:
from numpy import * mymatrix = mat([[1,2,3],[4,5,6],[7,8,9]]) mymatrix2 = mat([[1],[2],[3]]) print mymatrix*mymatrix2 输出结果: [[14] [32] [50]]
5.矩阵的转置:
数学公式:
from numpy import * mymatrix = mat([[1,2,3],[4,5,6],[7,8,9]]) print mymatrix.T # 矩阵的转置 mymatrix.transpose() # 矩阵的转置 print mymatrix 输出结果: [[1 4 7] [2 5 8] [3 6 9]] [[1 2 3] [4 5 6] [7 8 9]]
5. 矩阵的其他操作:行列数、切片、复制、比较
from numpy import * mymatrix = mat([[1,2,3],[4,5,6],[7,8,9]]) [m,n]=shape(mymatrix) # 矩阵的行列数 print "矩阵的行数和列数:",m,n myscl1 = mymatrix[0] # 按行切片 print "按行切片:",myscl1 myscl2 = mymatrix.T[0] # 按列切片 print "按列切片:",myscl2 mycpmat = mymatrix.copy() # 矩阵的复制 print "复制矩阵:\n",mycpmat #比较 print "矩阵元素的比较:\n",mymatrix < mymatrix.T 输出结果: 矩阵的行数和列数: 3 3 按行切片: [[1 2 3]] 按列切片: [[1 4 7]] 复制矩阵: [[1 2 3] [4 5 6] [7 8 9]] 矩阵元素的比较: [[False True True] [False False True] [False False False]]