码迷,mamicode.com
首页 > 其他好文 > 详细

4-Numpy似双丝网,中有千千结(上)

时间:2017-05-14 10:30:31      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:sel   学习   bgp   numpy   python   log   慢慢   oar   apk   

迄今为止,大家已经学习了Python中一些常用的数据结构,如字符串、元祖、列表、字典……群主以温水煮青蛙的耐心慢慢引领着大家,终于来到了Numpy这个水深火热的沸水区!To jump or not to jump?皮糙肉厚的群主已经为大家试过水温,经验表明,不脱一层皮是爬不出来的……

 

Numpy是Python的一个科学计算库,提供了矩阵运算的功能。Numpy中的ndarray(多维数组)数据结构可用来表示向量(1-dimension)和矩阵(N-dimension)。和Numpy中的Array比起来,List这种小白的数据结构可以说是Too simple, sometimes naive。先放一张图给大家感受一下群主最津津乐道的数组切片操作,看懂这些,保证你整个人都升华了!(可参考《跟老齐学Python轻松入门》P56~P58了解列表的索引和切片用法)

 

技术分享

 

虽然装完逼就跑的感觉很刺激,但本着不离不弃的原则,群主依然会耐心带领大家,一步一个脚印走过这片暗流涌动的沼泽地。既然大家对Numpy的Array已有了感性认识,下面从最简单的开始,安抚大家受到惊吓的小心灵:)

 

01

Numpy arrays基本操作

技术分享

 

  • 元素索引

一维数组的元素访问方式和列表的元素访问语法一样:

技术分享

 

  • 数组和列表的区别

最重要的区别是:数组是“同质的”,即所有元素必须为同一类型,而列表中的元素可以为任意不同类型,例如可以把上面列表中最后一个元素改为字符串型,而贸然改变数组中元素类型则会报错!

技术分享

 

  • 数组的属性

数组中元素类型的信息包含在dtype属性里。

技术分享

一旦数组被创建,它的dtype就固定了,只能增加相同类型的元素。此例中dtype是整数,如果我们存储一个浮点数它将被自动转换成整数:

技术分享

 

  • 创建数组

上面我们用一个列表来初始化数组,此外还有很多其他创建数组的方式。现实中常需用常量来初始化数组,例如0或1(分别作为加法或乘法运算的初始值),Numpy的zeros和ones函数即为了解决这一需求。

技术分享

也可以先初始化为空值,再填充具体值。

技术分享

 

  • 定义序列

Numpy提供arange函数,和Python内置的range函数类似,但返回的是数组而不是列表。

技术分享

linspace和logspace函数创建线性和对数空间的坐标序列,需指定将要创建的点数,以及区间的左右端点。

技术分享

 

  • 随机数组

创建遵从特定分布规律的随机数构成的数组也很有用。np.random模块中有很多函数能实现这类需求。

技术分享

 

  • 用布尔数组做索引

和Python中列表类似,上面我们都是用单个数字做索引或切片来访问数组中的特定元素。此外,数组还支持另一种更加强大的索引方式:用布尔值数组来做索引。这种索引方式在需要提取出满足特定条件的数组元素时非常有用。

 

例如,我们想把数组norm10中所有大于9的元素都替换为0,首先需要找到判断是否满足条件的布尔值数组(mask)。

技术分享

有了mask,我们就可以用它来读取数组中满足条件(对应布尔值为True)的元素,并把这些元素置为0。

技术分享

 

下周介绍多维数组的切片、数学运算以及线性代数运算,敬请期待!

4-Numpy似双丝网,中有千千结(上)

标签:sel   学习   bgp   numpy   python   log   慢慢   oar   apk   

原文地址:http://www.cnblogs.com/turingbrain/p/6851592.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!