注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Wei Ding blog

 
 
 

日志

 
 

python利用numpy进行矩阵运算,如求逆(转载)  

2014-04-15 15:47:21|  分类: python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://www.ituring.com.cn/article/2162

机器学习算法涉及很多线性代数知识,因此本书在使用Python语言构造机器学习应用时,会经常使用NumPy函数库。如果不熟悉线性代数也不用着急,这里用到线性代数只是为了简化不同的数据点上执行的相同数学运算。将数据表示为矩阵形式,只需要执行简单的矩阵运算而不需要复杂的循环操作。在你使用本书开始学习机器学习算法之前,必须确保可以正确运行Python开发环境,同时正确安装了NumPy函数库。NumPy函数库是Python开发环境的一个独立模块,而且大多数Python发行版没有默认安装NumPy函数库,因此在安装Python之后必须单独安装NumPy函数库。在Windows命令行提示符下输入c:\Python27\python.exe,在Linux或者Mac OS的终端上输入python,进入Python shell开发环境。今后,一旦看到下述提示符就意味着我们已经进入Python shell开发环境:

>>>

在Python shell开发环境中输入下列命令:

>>> from numpy import *

上述命令将NumPy函数库中的所有模块引入当前的命名空间。Mac OS上输出结果如图1-3所示。

enter image description here

图1-3 命令行启动Python并在Python shell开发环境中导入模块

然后在Python shell开发环境中输入下述命令:

>>> random.rand(4,4)
array([[ 0.70328595,    0.40951383,    0.7475052 ,    0.07061094],
       [ 0.9571294 ,     0.97588446,    0.2728084 ,    0.5257719 ],
       [ 0.05431627,    0.01396732,    0.60304292,    0.19362288],
       [ 0.10648952,     0.27317698,    0.45582919, 0.04881605]])

上述命令构造了一个4x4的随机数组,因为产生的是随机数组,不同计算机的输出结果可能与上述结果完全不同。

NumPy矩阵与数组的区别

NumPy函数库中存在两种不同的数据类型(矩阵matrix和数组array),都可以用于处理行列表示的数字元素。虽然它们看起来很相似,但是在这两个数据类型上执行相同的数学运算可能得到不同的结果,其中NumPy函数库中的matrix与MATLAB中matrices等价。

调用mat()函数可以将数组转化为矩阵,输入下述命令:

>>> randMat = mat(random.rand(4,4))

由于使用随机函数产生矩阵,不同计算机上输出的值可能略有不同:

>>> randMat.I
matrix([[ 0.24497106,  1.75854497, -1.77728665, -0.0834912 ],
        [ 1.49792202,  2.12925479,  1.32132491, -9.75890849], 
        [ 2.76042144,  1.67271779, -0.29226613, -8.45413693],
        [-2.03011142, -3.07832136,  1.4420448 ,  9.62598044]])

.I操作符实现了矩阵求逆的运算。非常简单吧?没有NumPy库,Python也不能这么容易算出来矩阵的逆运算。不记得或者没学过矩阵求逆也没关系,NumPy库帮我们做完了,执行下面的命令存储逆矩阵:

>>> invRandMat = randMat.I

接着执行矩阵乘法,得到矩阵与其逆矩阵相乘的结果:

>>> randMat*invRandMat
matrix([[  1.00000000e+00,  0.00000000e+00,  2.22044605e-16,   1.77635684e-15],
        [  0.00000000e+00,  1.00000000e+00,     0.00000000e+00,   0.00000000e+00],
        [  0.00000000e+00,  4.44089210e-16,     1.00000000e+00,  -8.88178420e-16],
        [ -2.22044605e-16,  0.00000000e+00,     1.11022302e-16,   1.00000000e+00]])

结果应该是单位矩阵,除了对角线元素是1,4x4矩阵的其他元素应该全是0。实际输出结果略有不同,矩阵里还留下了许多非常小的元素,这是计算机处理误差产生的结果。输入下述命令,得到误差值:

>>> myEye = randMat*invRandMat
>>> myEye - eye(4)
matrix([[  0.00000000e+00, -6.59194921e-17, -4.85722573e-17, -4.99600361e-16],
        [  2.22044605e-16,    0.00000000e+00, -6.03683770e-16, -7.77156117e-16],
        [ -5.55111512e-17, -1.04083409e-17, -3.33066907e-16, -2.22044605e-16],
        [  5.55111512e-17,    1.56125113e-17, -5.55111512e-17,  0.00000000e+00]])

函数eye(4)创建4×4的单位矩阵。

只要能够顺利地完成上述例子,就说明已经正确地安装了NumPy函数库,以后我们就可以利用它构造机器学习应用程序。即使没有提前学习所有的函数也没有关系,本书将在需要的时候介绍更多的NumPy函数库的功能。

  评论这张
 
阅读(11272)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017