《深度学习与图像识别:原理与实践》—2.3.6 Numpy中的矩阵运算
2.3.6 Numpy中的矩阵运算
矩阵运算(加、减、乘、除),在本书中将严格按照数学公式来进行演示,即两个矩阵的基本运算必须具有相同的行数与列数。本例只演示两个矩阵相减的操作,其他的操作读者可以自行测试。示例代码如下:
import numpy as np
myones = np.ones([3,3])
myeye = np.eye(3) #生成一个对角线的值为1,其余值都为0的三行三列矩阵
print(myeye)
print(myones-myeye)
输出结果如下:
[[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
[[ 0. 1. 1.]
[ 1. 0. 1.]
[ 1. 1. 0.]]
numpy.eye(N, M=None, k=0, dtype=<type ‘float’>)中第一个参数输出矩阵(行数=列数),第三个参数默认情况下输出的是对角线的值全为1,其余值全为0。
除此之外,Numpy还预置了很多函数,使用这些函数可以作用于矩阵中的每个元素。下面我们来看下表2-1。
表2-1 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)的结果都为单位矩阵。并不是所有的矩阵都有逆矩阵。
- 点赞
- 收藏
- 关注作者
评论(0)