菠菜网

欧博allbet注册:手把手教你学numpy,今后数据处理不再慌【三】

时间:6个月前   阅读:78

本文始发于小我私家民众号: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中对于索引的设定和功效。因此这既是主要的基本功,也是为后面的学习打基础。

若是喜欢本文,可以的话,请点个关注,给我一点激励,也利便获取更多文章。

,

Allbet

www.ordsports.com欢迎进入欧博平台(Allbet Gaming),欧博平台开放欧博(Allbet)开户、欧博(Allbet)代理开户、欧博(Allbet)电脑客户端、欧博(Allbet)APP下载等业务。

上一篇:联博api接口:旅店月租平过茤

下一篇:伸博官网下载:池子被移出群聊是怎么回事?终于真相了,原来是这样!