矩阵运算是机器学习经常用到的运算,NumPy可以很容易完成矩阵的各类运算。矩阵在NumPy中用二维数组表示,第一维数组称为行,第二维数组称为列,假设第一维数组有m个元素,第二维数组有n个元素,则该二维数组也称为m行n列矩阵,简称m X n矩阵。
矩阵基本运算有矩阵加法、矩阵减法、矩阵转置、矩阵相乘、求解线性方程等运算。
(1)矩阵加法运算
矩阵加法是指两个矩阵相加,相加的两个矩阵行列数要相等,相加后的矩阵行列数不变,其内的各元素为其对应元素相加后的值。
下面的代码定义了A和B两个矩阵,并计算A+B,输出的矩阵为A和B矩阵的和。
>>> import numpy as np >>> A = np.array([[3,2,0],[6,1,5]]) >>> B = np.array([[9,6,1],[0,8,1]]) >>> A+B array([[12, 8, 1], [ 6, 9, 6]]) >>>
(2)矩阵减法运算
矩阵减法是指两个矩阵相减,相减的两个矩阵行列数要相等,相减后的矩阵行列数不变,其内的各元素为其对应元素相减后的值。
下面的代码定义了A和B两个矩阵,并计算A-B,输出的矩阵为A和B矩阵的差。
>>> import numpy as np >>> A = np.array([[3,2,0],[6,1,5]]) >>> B = np.array([[9,6,1],[0,8,1]]) >>> A-B array([[-6, -4, -1], [ 6, -7, 4]]) >>>
(3)矩阵转置运算
矩阵转置是把m行n列的矩阵按序进行行列互换得到n X m的矩阵。下面的代码定义了2行3列的A矩阵,对A矩阵进行转置元素得到3行2列的B矩阵。
>>> import numpy as np >>> A= np.array([[1,2,3],[4,5,6]]) >>> A array([[1, 2, 3], [4, 5, 6]]) >>> B = A.T >>> B array([[1, 4], [2, 5], [3, 6]]) >>>
(4)矩阵乘法运算
矩阵乘法运算是指两个矩阵相乘,相乘的两个矩阵需要满足如下条件:第一个矩阵的列数和第二个矩阵的行数必须相同。例如:A是一个2行3列的矩阵,B是一个3行2列的矩阵,A与B相乘后得到2行2列的矩阵。
>>> import numpy as np >>> A = np.array([[1,2,3],[4,5,6]]) >>> B = np.array([[2,3],[5,6],[7,8]]) >>> C = np.matmul(A,B) >>> C array([[33, 39], [75, 90]]) >>>
(5)求解线性方程
机器学习数学运算中比较常见的问题之一是求解线性方程。 这是一个例子,我们来寻找解决方程的向量x。
线性方程: Ax = b
其中A是一个已知矩阵,b是一个已知向量,x是我们要求的未知向量,向量x的每一个元素都是未知的。矩阵A的每一行和b中对应的元素构成一个约束。
对于上面的线性方法组,可以使用NumPy线性计算linalg模块的solve函数来求解线性方程组。
>>> import numpy as np >>> A = ([[2,1,-2],[3,0,1],[1,1,-1]]) >>> b = ([-3,5,-2]) >>> x = np.linalg.solve(A,b) >>> x array([ 1., -1., 2.])