本文始发于个人公众号:TechFlow,原创不易,求个关注

今天是numpy专题的第三篇,我们来聊聊numpy当中的索引。

上篇的末尾其实我们简单地提到了索引,但是没有过多深入。没有过多深入的原因也很简单,因为numpy当中关于索引的用法实在是很多,并不是我们想的那样用一个下标去获取数据就完事了。

所以我整理了一下相关的用法,把关于索引的使用简单分成了几类,我们一个一个来看。

切片索引

切片我们都熟悉,用冒号将两个数隔开,表示一个区间的上界和下界。通过这种方式访问这个区间内的所有元素。

这一点我们之前介绍过,我们简单回顾一下。

这是一维数组的切片,既然一维数组可以切片,那么同样高维数组也可以切片。我们来看一个二维的数组的切片:

我们生成了一个3 x 4的二维数组,然后通过切片获取了它的1-2数据。由于我们是对行切片,默认保留这一行的所有数据。

如果我们并不需要所有数据,而是只需要某一列的固定数据,可以写成这样:

这一行代码的意思是对于行我们获取1-3行固定第二列的数据,我们用表格表示的话大概是下面这个样子:

我们也可以对两个维度同时切片,这样可以得到更加复杂的数据:

这样切片获得的数据大概是这样的:

也就是说在numpy的数组当中各个维度是分开的,每一个维度都支持切片。我们可以根据我们的需要切片或者是固定下标来获取我们想要的切片。

bool型索引

numpy当中还有一个非常好用的索引方式叫做bool型索引。前文介绍广播的时候曾经介绍过,当我们将两个大小不一致的数组进行计算的时候,numpy会自动帮我们将它们广播成大小一致的情况再进行运算。

而逻辑判断其实也是一种运算,所以如果我们将逻辑运算应用在numpy数组上的话同样会得到一个numpy数组,只不过是bool类型的numpy数组。

我们来看一个例子:

我们创建了一个numpy的数组,然后将它和整数4进行比较,numpy会将这个运算广播到其中每一个元素当中,然后返回得到一个bool类型的numpy数组。

这个bool类型的数组可以作为索引,传入另外一个数组当中,只有bool值为true的行才会被保留。

我们发现只有第4行和第6行的数据被保留了,也就是bool值为true的行号被保留了。这是非常有用的数据获取方式,我们可以直接将判断条件放入索引当中进行数据的过滤,如果应用熟练了会非常方便。

再举个例子,假如我们要根据二维数据的第一列的数据进行过滤,仅仅保留第一列数据大于0.5的。如果按照传统的方法我们需要用一个循环去过滤,但是使用bool类型索引,我们可以只需要一行搞定:

arr[arr[:, 0] > 0.5]

如果有多个条件,我们可以用位运算的与或非进行连接。在Python当中位运算的与或非分别用符号&, |, ~表示。

举个例子,比如我们想要筛选出arr数组当中第1列大于0.5,并且第二列小于0.5的数据,我们可以写成这样:

arr[(arr[:, 0] > 0.5) & (arr[:, 1] < 0.5)]

如果我们想求这个条件的相反条件,我们当然可以将判断条件反过来写,但是也可以通过~符号直接取反:

arr[~((arr[:, 0] > 0.5) & (arr[:, 1] < 0.5))]

花式索引

除了bool索引之外,numpy当中还支持一种花式索引。

所谓的花式索引,意思是说支持将另外一个数组当做是索引来访问数据

举个很简单的例子:

从上面的例子我们可以看出来,我们把idx这个数组当中的值当做了索引进行了数据的访问。并且有重复值也没有关系,numpy不会进行去重。

通过数组访问数据有什么用呢?其实非常有用,在我们做机器学习的过程当中,我们经常涉及到一个采样的问题。我们每次训练并不是全量的数据,否则非常慢,有时候甚至是不可能完成的,因为数据量太大了。我们往往是抽取出一批数据作为一个batch来训练的,这个在之前批量梯度下降的文章当中曾经提到过。

那么一个batch的数据是怎么抽取的呢?就是这样抽取的,我们会调用np中的一个函数叫做choice,我们用它来从所有样本的下标当中抽取我们指定数量的下标。

有了下标数组之后,我们用一下花式索引就可以拿到对应的全部数据了,如果你看过大牛写的深度学习的代码,里面几乎都是这样实现的。

总结

今天关于numpy当中索引的使用和介绍就到这里,仅仅看介绍可能感受并不明显。但如果上手用numpy做过一次数据处理和实现过机器学习的模型,相信一定可以感受到它的易用性和强大的功能。索引这个功能非常常用,也非常重要,在后序的pandas库当中同样沿用了numpy中对于索引的设定和功能。因此这既是重要的基本功,也是为后面的学习打基础。

如果喜欢本文,可以的话,请点个关注,给我一点鼓励,也方便获取更多文章。

过滤一批数据_手把手教你学numpy,从此数据处理不再慌【三】相关推荐

  1. python中字典的value可以为任意对象_手把手教你学Python之字典

    字典是一种无序可变的容器,字典中的元素都是"键(key):值(value)"对, "键"和"值"之间用冒号隔开,所有"键值对&qu ...

  2. c语言随机生成int64_t类型的数据_手把手教你代码生成(上):MATLAB代码生成

    FrancisZhao:专栏文章列表以及一些说明​zhuanlan.zhihu.com FrancisZhao:手把手教你代码生成(下):SIMULINK代码生成​zhuanlan.zhihu.com ...

  3. 手把手教你入侵网站修改数据_手把手教你使用Python抓取QQ音乐数据(第四弹)...

    [一.项目目标] 通过手把手教你使用Python抓取QQ音乐数据(第一弹)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 通过手把手教你使用Python抓取QQ音乐 ...

  4. mysql sql注入怎么获取数据_手把手教你通过SQL注入盗取数据库信息

    目录数据库结构 注入示例判断共有多少字段 判断字段的显示位置 显示登录用户和数据库名 获取所有数据库名 获取对应数据库的表 获取对应表的字段 获取所有的用户密码 我们都是善良的银!一生戎码只为行侠仗义 ...

  5. python私人定制_手把手教你学python第十五讲(魔法方法续私人“定制”)

    python无处不对象的深刻理解 前面写了这么多,我觉得有必要从一个大的层面,也就是OO来看问题的本质.只要你调用对象的语法是合乎python的习惯的,那就是可以的,我们以前从来没有像下面这么写过,对 ...

  6. bootstraptable 怎么在特定行添加数据_手把手教你做一个“渣”数据师,用Python代替老情人Excel...

    大数据文摘出品 来源:medium 编译:张大笔茹 十年前,你说你是做数据的,大家的反应就是 -- 用 Excel 做做表. 现在,要成为一个合格的数据分析师,你说你不会 Python,大概率会被江湖 ...

  7. python 函数修饰器 父类_手把手教你学python第十四讲(函数装饰器,super用法和时间处理)...

    文中有些字在图中是因为每篇文章最多100张图片,我把有的小图片和文字一起截图了,文中所有的引用都会标出原文网址,除此以外都是作者原创. 有时候会在文章最前或者最后补充一些知识或者把前面说的有问题的地方 ...

  8. 怎么获取codeforces的数据_手把手教你学会新媒体运营——如何通过数据分析来优化新媒体运营...

    一般来说,我们希望运营的新媒体的每篇内容都可以获得高打开率和高分享率.但事实并不总是如愿,因此,在新媒体运营过程当中,我们需要不断地优化自身内容,以求可以获得更多的关注和流量.那么我们今天来讨论下如何 ...

  9. python读取mt4数据_手把手教你使用Python进行数据获取和作图

    最近在学习Python3做数据分析.就尝试用COT和汇率数据来练习一下.毕竟不实际找个东西做一下碰不到问题,也学不会啊. 话不多说,目标就是(1)抓取网络的COT数据,(2)结合MT4导出的汇率数据, ...

最新文章

  1. C 一样快,Ruby 般丝滑的 Crystal 发布 1.0 版本,你看好吗?
  2. [Lua学习]简单链表
  3. 领域驱动设计,让程序员心中有码(五)
  4. mysql-修改密码(error-1290 (HY000): The MySQL server is running with the --skip-grant-tables option so)
  5. linux下文件删除不了
  6. 【数字逻辑设计】判断二进制加法溢出的电路设计
  7. 【ACDU推荐好文】手把手教你 DBCA 搭建 Oracle ADG
  8. Java Web项目在Linux服务器自动化部署
  9. servletconfigservletcontext
  10. 计算机磁盘坏道怎么隔离,小科普 | 硬盘坏道就凉凉?把它隔离出去吧!(DLC)...
  11. 微信公众号里面使用定位
  12. android+模拟示波器,基于Android的虚拟示波器软件设计
  13. ubuntu20.04屏幕亮度无法调节(亮度条调节无效)的简单靠谱解决方案及踩坑历程
  14. linux嗅探密码,tcpdump密码嗅探_tag
  15. 使用proteus仿真STM32超声波SRF04测距!Code+Proteus
  16. 三星note5 android9,史上最快!三星公布新版安卓9.0升级名单:Note FE在内
  17. Latex (2)Latex中插图、表格、浮动体
  18. 高德地图 公交路线查询
  19. 使用Python实现自动生日祝福
  20. dcmtk在PACS开发中的应用(基础篇) 第三章 工作列表(Work List)(一)( BY 冷家锋)

热门文章

  1. R语言ggplot2可视化气泡图:无填充色的气泡图、自定义填充色的气泡图
  2. java中getDelta是什么意思_Java IResourceDelta.getMarkerDeltas方法代码示例
  3. mysql text index_MySQL 全文索引(fulltext index)
  4. 生信基础巩固Linux篇
  5. Evaluation of hybrid and non-hybrid methods for de novo assembly of nanopore reads
  6. java opennlp_使用opennlp进行文档分类
  7. STM32按键控制led四种方法
  8. android canvas绘制圆角_Android自定义View撸一个渐变的温度指示器(TmepView)
  9. python虚拟环境迁移及代码实现
  10. 【Three.js】关于Three.js的辅助库ststs.js报错的解决方案