Numpy库学习——线性代数及相关运算

来源:互联网 发布:刺客信条2优化怎么样 编辑:程序博客网 时间:2024/06/04 23:30

     在机器学习和深度学习的Python编程过程中,因为运行速度的要求,通常建议进行向量化。在向量化表达式后,会涉及大量的线性代数运算,尤其是矩阵之间的乘积运算。下面将会着重介绍Numpy库中的线性代数运算。

在对线性代数运算介绍之前,需要区分array数组和matrix矩阵之间的差异,以便为后续

在不同情况下完成相同的线性代数运算提供基础。

(一)array数组和Matrix矩阵的区别

对于多维数组(ndarray类)的运算,Numpy默认不采用矩阵运算,即默认不把对应数组当做矩阵看待。如果希望对数组进行矩阵运算,可以通过调用相应的函数来实现。ndarray类创建的数组对象可以是1维、2维、3维....N维。在numpy里面arrays遵从逐个元素的运算,这一点与矩阵运算相差较大,如下面示例:


参考:http://blog.csdn.net/vincentlipan/article/details/20717163


对于Numpy提供的matrix类,其创建的对象为矩阵对象,且总是二维的。Matrix类型继承于ndarray类型,因此含有ndarray的所有数据属性和方法。对Matrix所创建的对象的加减乘除运算默认采用矩阵方式计算。在NumPy里,“mat”是“matrix”的一个别名。

1)可以利用np.mat()函数将ndarray数组对象转换为matrix矩阵对象,如下所示

参考:http://blog.csdn.net/shuaishuai3409/article/details/50830196


2)也可以使用np.asmatrix()np.asarray()函数实现相互转换

参考:http://blog.csdn.net/vincentlipan/article/details/20717163


:为了避免不必要的麻烦,在实际应用中可以考虑仅用ndarray数组,并调用相关的函数执行矩阵运算,这样即可以减少不必要的麻烦!!


(二)常见的矩阵运算

  假设A、B为ndarray数组对象,C、D为matrix矩阵对象,那么A和B对应的相关矩阵运算方式如下表所示。

import  numpy  as  np

array和matrix对象的矩阵运算矩阵运算array对象matrix对象备注转置A.T或A.transpose()C.T采用相同方式求逆np.linalg.inv(A)C.I或C**-1
乘积np.dot(A,B)C*DC和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)求迹