前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python第二十九课:NumPy索引

Python第二十九课:NumPy索引

作者头像
HuangWeiAI
发布2019-07-30 15:45:35
1.1K1
发布2019-07-30 15:45:35
举报
文章被收录于专栏:浊酒清味

当我们建立好NumPy数组并且学会了一定算术运算后,针对数组中一些特定位置的元素处理就显得很为必要,因此我们需要一项叫做索引的技术来具体定位数组的特定元素。

1基础索引

对于一维数组,其索引和列表方法一样。比如我们有一个数组A,那么A[x]就是索引A数组中的第x个元素,这里切记x从0开始计数,所以准确来讲是索引第x+1个元素。对于二维的NumPy数组,我们也可以用一维索引的方法,这时我们会索引出某一行。

我们首先建立了一个0到11的数组A,我们试图索引它的第一个元素,大家可以猜一下,结果是什么。接着我们利用了一个变形技术reshape把A转换成一个二维数组,然后用一维索引得到变形后的第二行所有元素。

运行结果:

第一个打印结果是3,不知道大家猜对了没有。如果猜对了,恭喜你已经熟悉了Python从0开始计数的特性。第二个打印时reshape之后的第二行,也就是从6到11的整个一行,所以结果其实是一个一维数组。

二维索引主要针对二维以及二维以上的数组,索引方式一般可以写成A[1,1]或者A[1][1]。在下面的例子中我们会简单测试一下。现在我们着重介绍一下用冒号进行范围索引,因为我们有时候想要一段的数组,这时候范围索引就显得很方便实用。具体而言,用a:b这种方式可以做到,从a位置出发到b位置结束。这个就和我们之前学过的numpy.arange的形式是一样的。如果你想加入步长功能就需要使用a:b:c这种方式,a是起始值,b是终止值,c是步长

我们首先用numpy.eye()函数建立了一个5乘以5的单位矩阵。先测试一下二维索引中单体索引,A[2,2]和A[2][2]两种方式都是可以的。接着我们测试一下范围索引,第一个[1]表示A矩阵的第二行:[0 1 0 0 0];后面的[0:4:2]其实只能索引出来两个数字,就是0和3两个位置上的数字。

运行结果:

2高级索引

高级索引是Numpy数组相对于列表基础上提供的更多的索引方式,包括整数数组索引,布尔索引以及花式索引。我们只讲前面两种索引方法,并不需要太花式。

整数数组索引是一个坐标形式的索引,比如你想要采集一个矩阵中(1,0),(2,1),(2,2)这三个位置的元素,那么你可以将他们一起打包成一个数组,然后一起索引。具体操作是,先把第一个维度的数字组成数组的第一维度,然后把第二个维度的数字组合成第二个维度:[[1,2,2],[0,1,2]],前面的1,2,2就是三个元素对应的一个维度坐标;而0,1,2就是第二个维度的坐标。最终的返回结果是一个一维数组。

比如这里,我们连击arange和reshape一气呵成建立一个3乘以3的数组,按照上面说的方法找到数组A的三个元素,大家去看看结果是不是对应着我们代码里面的三个元素:

最后我们介绍一下布尔索引。这是一种通过布尔(逻辑)运算来获得符合条件元素的索引方式。简单来说,你可以通过给定一定的条件,筛选出满足条件的元素。这种索引方式是我们日常使用Numpy数组较为常用和使用的方法,大家可不要忽略了。

我们先用两行代码给大家展示一下布尔索引的运算过程,第18行代码其实才是完整的操作,打印出A数组中大于5的元素,以一个一维数组的形式数出来。第17代码其实给出布尔运算的一步,输出结果为:大于5的位置是True而小于5的位置是False,接着通过真假关系带入A数组,最终把真的元素挑出来。这就是布尔索引的运算过程。B是一个打印出复数元素的例子,原理是一样的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浊酒清味 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档