深度学习与目标检测:工具、原理与算法
上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)的结果为单位矩阵,并不是所有的矩阵都有逆矩阵。