python3机器学习经典算法与应用之Numpy.array——Fancy Indexing、Compare

Fancy Indexing(花式索引)

正常使用索引方式可以随机访问任意一个元素,也可以使用切片的形式访问一段数据元素,或者一段数据元素中满足步长要求的数据。
在这里插入图片描述
如何访问没有规律的数据呢?比如想访问索引为3,5,8的数据?
将索引组织成一个列表的形式,再将这个列表作为索引就可以访问了。
在这里插入图片描述
这个访问方法同样参数也可以是二维数组。结果将得到二维矩阵,其中得到的值是ind中每一元素作为索引得到的元素值。
在这里插入图片描述
将原本的数组转变成4*4的矩阵。若想按照行和列的索引来访问,可以将行(row)和列(col)组织成列表,然后作为参数索引值传递。最终得到的元素值就是row和col对应值组成的索引的返回值。下例中就是返回X[0][1],X[1][2],X[2][3]。
在这里插入图片描述
下例中第一组取值为X[0][1],X[0][2],X[0][3]。
第二组取值为X[0][1],X[0][2],X[0][3],X[1][1],X[1][2],X[1][3]。若行和列长度相等,对应组合,若不相等则排列组合。
在这里插入图片描述
另外col或者row的值可以为bool类型值。
下面示例的col表示:我对索引0,2,3感兴趣(其bool值为True),对索引1不感兴趣(其bool值为False)。所以最终是row(1和2)和col(0,2,3)的值排列组合成留个索引的值。
在这里插入图片描述

numpy.array比较

将数组的值和数值进行比较,可以直接使用比较运算符。返回值是一个bool类型的数组,若满足比较条件这个元素的位置的值为True,否则为False。
如下例,只有前三个元素的值小于3,所以为True,后面的值都为True。
在这里插入图片描述
其他的运算符也同样使用。
在这里插入图片描述
比较运算符两侧比价值也可以写成表达式的形式。
下例中x数组中只有元素4满足:24 == 24-44,所以只有4的位置元素值为True。
在这里插入图片描述
比较运算符同样适用于二维矩阵。
在这里插入图片描述
统计满足比较元素(True)的个数。
使用numpy函数进行统计过程中,True被认为是1,False被认为是0,所以numpy.sum()求的是True的个数。而numpy.count_nonzero()求的是非0元素的个数也就是True的个数。
在这里插入图片描述
numpy.any()函数返回bool类型值。给定的数组中只要有任意一个值为True,就返回True,否则返回False。
在这里插入图片描述
numpy.all()函数返回bool类型值。只有给定的数组中所有的值为True,才返回True,否则返回False。
在这里插入图片描述
求数组(或二维矩阵)中偶数(或奇数)的个数。
如下例:如果在不指定行或者列的情况下,同居二维矩阵中总的偶数个数。也可以通过参数axis来指定每一行或者每一列的偶数个数。第一个返回了二维矩阵X总的偶数个数8,第二个返回了沿着列的方向,也就是每一行的偶数个数,分别是2,2,2,2,第三个返回沿着行的方向,也就是每一列的偶数的个数,分别是4,0,4,0。在这里插入图片描述
同样numpy.all()和numpy.any()也适用于二维矩阵。同样可以指定维度,给指定维度下,另外一个维度的返回值。如下例:指定沿着列的方向,也就是每一行执行一次np.all()函数,只有第一行的0不满足条件,所以第一行返回值为False,其余行的值为True。
在这里插入图片描述
下面技巧性的操作来了!我想求得x数组中满足元素值大于3并且小于10的元素的个数。采取的操作是让x先去和每一个值比较产生一个bool类型数组,在进行按位与运算,也就是说True & True才能为True,否则为False。这通过位运算就可以把满足两部分条件的True值&出来。最后统计True的个数。
在这里插入图片描述
下面两个例子展示了,第一个:x中是偶数或者大于10的元素的个数。第二个:x中不等于0的元素的个数。
在这里插入图片描述

Fancy Indexing和Compare结合

通过compare返回的是bool类型值,和bool类型值可作为索引的特性,二者相结合就能取出满足条件的元素。也可以再进行统计元素个数。
在这里插入图片描述
下面示例中,第一个返回x数组中的偶数元素。
第二个示例返回满足条件的行的所有元素:一行的第四个元素是3的倍数的行。
在这里插入图片描述
在机器学习中通常是先试用Pandas对表格数据进行预处理,然后使用numpy进行矩阵化,再将矩阵作为参数传递给scikit-learn进行学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值