手把手教你学numpy,今后数据处理再也不慌【三】

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


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

上篇的末尾其实咱们简单地提到了索引,可是没有过多深刻。没有过多深刻的缘由也很简单,由于numpy当中关于索引的用法实在是不少,并非咱们想的那样用一个下标去获取数据就完事了。机器学习

因此我整理了一下相关的用法,把关于索引的使用简单分红了几类,咱们一个一个来看。编辑器

切片索引

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

这一点咱们以前介绍过,咱们简单回顾一下。学习

这是一维数组的切片,既然一维数组能够切片,那么一样高维数组也能够切片。咱们来看一个二维的数组的切片:spa

咱们生成了一个3 x 4的二维数组,而后经过切片获取了它的1-2数据。因为咱们是对行切片,默认保留这一行的全部数据。3d

若是咱们并不须要全部数据,而是只须要某一列的固定数据,能够写成这样:code

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

咱们也能够对两个维度同时切片,这样能够获得更加复杂的数据:

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

也就是说在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中对于索引的设定和功能。所以这既是重要的基本功,也是为后面的学习打基础。

若是喜欢本文,能够的话,请点个关注,给我一点鼓励,也方便获取更多文章。

相关文章
相关标签/搜索