在机器学习和深度学习的Python编程过程中,因为运行速度的要求,通常建议进行向量化。在向量化表达式后,会涉及大量的线性代数运算,尤其是矩阵之间的乘积运算。下面将会着重介绍Numpy库中的线性代数运算。
在对线性代数运算介绍之前,需要区分array数组和matrix矩阵之间的差异,以便为后续
在不同情况下完成相同的线性代数运算提供基础。
(一)array数组和Matrix矩阵的区别
对于多维数组(ndarray类)的运算,Numpy默认不采用矩阵运算,即默认不把对应数组当做矩阵看待。如果希望对数组进行矩阵运算,可以通过调用相应的函数来实现。ndarray类创建的数组对象可以是1维、2维、3维....N维。在numpy里面arrays遵从逐个元素的运算,这一点与矩阵运算相差较大,如下面示例:
参考:http://blog.youkuaiyun.com/vincentlipan/article/details/20717163
对于Numpy提供的matrix类,其创建的对象为矩阵对象,且总是二维的。Matrix类型继承于ndarray类型,因此含有ndarray的所有数据属性和方法。对Matrix所创建的对象的加减乘除运算默认采用矩阵方式计算。在NumPy里,“mat”是“matrix”的一个别名。
1)可以利用np.mat()函数将ndarray数组对象转换为matrix矩阵对象,如下所示
参考:http://blog.youkuaiyun.com/shuaishuai3409/article/details/50830196
2)也可以使用np.asmatrix()
和np.asarray()
函数实现相互转换
参考:http://blog.youkuaiyun.com/vincentlipan/article/details/20717163
注:为了避免不必要的麻烦,在实际应用中可以考虑仅用ndarray数组,并调用相关的函数执行矩阵运算,这样即可以减少不必要的麻烦!!
(二)常见的矩阵运算
假设A、B为ndarray数组对象,C、D为matrix矩阵对象,那么A和B对应的相关矩阵运算方式如下表所示。
import numpy as np
矩阵运算 | array对象 | matrix对象 | 备注 |
转置 | A.T或A.transpose() | C.T | 采用相同方式 |
求逆 | np.linalg.inv(A) | C.I或C**-1 | |
乘积 | np.dot(A,B) | C*D | C和D均为矩阵 |
共轭转置 | C.H | ||
求迹 | np.trace(A) |
参考:http://www.cnblogs.com/fnight/p/5763479.html
http://www.cnblogs.com/hanahimi/p/4340767.html
(1)求逆
--对ndarray数组对象求逆
可以采用np.linalg.inv()函数来求取,如下图所示,即
--对matrix矩阵对象求逆
(2)转置
对于ndarray数组对象和matrix矩阵对象的转置都可以采用“A.T”的方式,如下图示例,即
(3)乘积
(4)求迹