[原创]机器学习从Python开始(三)——NumPy 概述

A.3 NumPy 概述

虽然安装了NumPy库,但你可能会有疑问:这个库的功能是什么?学术地说:NumPy是一种Python的矩阵类型,在它上面可以进行很多功能运算。通俗地说:这是一个使晕眩更容易、执行更快的库,因为执行是用C来完成的,这比Python的运算速度要快很多。

尽管NumPy被称为矩阵库,但它有2个基本的数据类型:数组(array)和矩阵(matrix)。对数组和矩阵的操作略有不同,如果你之前使用过MATLAB,你应该对矩阵更熟悉一些。这两种数据类型都不需要使用循环操作符号,但是当只有用Python时,你是离不开循环操作符号的。在NumPy中,你可以进行下面的数组运算:

>>> from numpy import array

>>> mm=array((1, 1, 1))

>>> pp=array((1, 2, 3))

>>> pp+mm

array([2, 3, 4])

这个功能如果在Python中,是要通过for循环来实现的。

这里举一个例子,为每个数字乘以常数2:

>>> pp*2

array([2, 4, 6])

为每个数字求平方:

>>> pp**2

array([1, 4, 9])

可以像访问list的元素一样访问数组中的元素:

>>> pp[1]

2

也可以创建一个多维的数组:

>>> jj = array([[1, 2, 3], [1, 1, 1]])

也可以像访问lists一样访问:

>>> jj[0]

array([1, 2, 3])

>>> jj[0][1]

2

同样地,也可以像访问矩阵的元素一样:

>>> jj[0,1]

2

将2个数组相乘时,是将第1个数组中的元素乘上第2个数组中的元素:

>>> a1=array([1, 2,3])

>>> a2=array([0.3, 0.2, 0.3])

>>> a1*a2

array([ 0.3, 0.4, 0.9])


接下来讨论矩阵:

同数组类似,需要导入NumPy的matrix和mat:

>>> from numpy import mat, matrix

NumPy的关键字mat是matrix的简写:

>>> ss = mat([1, 2, 3])

>>> ss

matrix([[1, 2, 3]])

>>> mm = matrix([1, 2, 3])

>>> mm

matrix([[1, 2, 3]])

可以将Python的lists转换成NumPy的矩阵:

>>> pyList = [5, 11, 1605]

>>> mat(pyList)

matrix([[ 5, 11, 1605]])

下面试着将2个矩阵相乘:

>>> mm*ss

Traceback (most recent call last):

File "", line 1, in

File "c:\Python27\lib\site-packages\numpy\matrixlib\defmatrix.py",

line 330, i

n __mul__

return N.dot(self, asmatrix(other))

ValueError: objects are not aligned

执行这个语句时产生了一个错误。矩阵类型的运算严格遵守矩阵的数学运算规则。你不可以用1X3的矩阵乘以1X3的矩阵,其中一个矩阵需要进行转置,你可以将3X1的矩阵乘以1X3的矩阵或将1X3的矩阵乘以3X1的矩阵。NumPy的矩阵类型有一个转置方法,从而轻松实现该乘法运算:

>>> mm*ss.T

matrix([[14]])

我们运用.T方法对ss矩阵实现了转置。

当调试算法错误时,如果知道维数是很有用的。如果想知道数组或矩阵的维数,可以使用NumPy中的shape:

>>> from numpy import shape

>>> shape(mm)

(1, 3)

如何实现矩阵mm中的每个元素乘上ss中的每个元素呢?这就是element-wise multiplication,它可以用NumPy的multiply方法实现:

>>> from numpy import multiply

>>> multiply(mm, ss)

matrix([[1, 4, 9]])

矩阵类型和数组类型还有很多其他有用的方法,例如:

>>> mm.sort()

>>> mm

matrix([[1, 2, 3]])

注意:这个方法会改变矩阵的实际顺序,如果你希望保留原先的顺序,在执行此方法之前,必须做数据备份。你也可以使用argsort()方法来找到排序前的元素位置:

>>> dd=mat([4, 5, 1])

>>> dd.argsort()

matrix([[2, 0, 1]])

你也可以计算矩阵中的numbers的mean:

>>> dd.mean()

3.3333333333333335


接下来,看看多维数组:

>>> jj = mat([[1, 2, 3,], [8, 8, 8]])

>>> shape(jj)

(2, 3)

这是一个2X3的矩阵。如果想得到一行中的所有元素,可以使用冒号(:)运算符和行号。例如:得到第1行的所有元素的语句是:

>>> jj[1,:]

matrix([[8, 8, 8]])

也可以获取一个范围内的元素。得到第1行、第0~1列的所有元素的语句如下:

>>> jj[1,0:2]

matrix([[8, 8]])

用NumPy中的方法可以简化Python编程的语句。


除了数组和矩阵,NumPy还有很多其他有用的功能,可以参考这份文档:

http://docs.scipy.org/doc/

部分译自《Machine Learning in Action》

版权声明:本文为原创文章,未经允许不得转载。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容

  • 先决条件 在阅读这个教程之前,你多少需要知道点python。如果你想从新回忆下,请看看Python Tutoria...
    舒map阅读 2,577评论 1 13
  • NumPy是Python中关于科学计算的一个类库,在这里简单介绍一下。 来源:https://docs.scipy...
    灰太狼_black阅读 1,228评论 0 5
  • 来源:NumPy Tutorial - TutorialsPoint 译者:飞龙 协议:CC BY-NC-SA 4...
    布客飞龙阅读 32,772评论 6 96
  • 一.NumPy的引入 标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列...
    wlj1107阅读 1,015评论 0 2
  • 在我的認知裡對於面對問題和解決問題意識一直不強,我覺得只出問題就可以了,解決問題不是我的事情,等待別人解...
    盛世贏家葉小華阅读 189评论 0 0