上QQ阅读APP看书,第一时间看更新
2.3.6 NumPy中的矩阵运算
在本书中,矩阵运算(加、减、乘、除)将严格按照数学公式进行演示,即两个矩阵的基本运算必须有相同的行数与列数。本例只演示两个矩阵相减的操作,其他操作读者可以自行测试。
import numpy as np myones = np.ones([3,3]) myeye = np.eye(3) #生成一个对角线的值为1,其余值都为0的3行3列矩阵 print(myeye) print(myones-myeye)
我们可以看到输出结果如下。
[[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]] [[ 0. 1. 1.] [ 1. 0. 1.] [ 1. 1. 0.]]
除此之外,NumPy还预置了很多函数,如表2-3所示,这些函数可以影响矩阵中的每个元素的值。
表2-3 NumPy预置函数
1.矩阵之间的点乘
矩阵的乘法必须满足第一个矩阵的列数等于第二个矩阵的行数,矩阵乘法的函数为dot。我们举个例子进行说明。
import numpy as np mymatrix = np.array([[1,2,3],[4,5,6]]) a = np.array([[1,2],[3,4],[5,6]]) print(mymatrix.shape[1] == a.shape[0]) print(mymatrix.dot(a))
返回结果如下。
[[22 28] [49 64]]
其原理是将mymatrix的第一行[1,2,3]与a矩阵的第一列[1,3,5]先相乘后相加,接着将mymatrix的第一行[1,2,3]与a矩阵的第二列[2,4,6]先相乘后相加,以此类推。
2.矩阵的转置
矩阵的转置就是将原来矩阵中的行变为列,我们举例进行说明。
import numpy as np a = np.array([[1,2,3],[4,5,6]]) print(a.T)
返回结果如下。
[[1 4] [2 5] [3 6]]
3.矩阵的逆
先导入numpy.linalg包,用linalg中的inv函数求逆,矩阵求逆的条件是矩阵的行数和列数相同,我们来举例说明。
import numpy as np import numpy.linalg as lg A = np.array([[0,1],[2,3]]) invA = lg.inv(A) print(invA) print(A.dot(invA))
返回结果如下。
[[-1.5 0.5] [ 1. 0. ]]
逆矩阵就是原矩阵A.dot(invA)以及invA.dot(A)的结果为单位矩阵,并不是所有的矩阵都有逆矩阵。