Numpy|须要信手拈来的功能

这是一篇Numpy中常常使用的API的不彻底总结,欢迎补充和指导。算法


01
数组

类型转化微信


凡是使用Numpy的小伙伴,无不遇到类型转化这个问题,而且常常须要经过调试才得以修正。机器学习


为何这个问题如此棘手?编辑器


请看, arr = np.array([9,10,'2',10],只有一个元素为str类型,那么numpy会当即将全部元素转为str型。学习


在工做中,咱们常常须要添加整列添加元素,这种操做可能会改变原来元素的类型。若是,你的操做涉及到数值上的加减乘除,添加元素后意外变为str型后,就会抛出异常。flex


这时候,须要进行显示类型转化:url


arr = arr.astype(np.float64)  # 直接转化为float64类型spa



02
.net

维数变化


有时候须要将多维数组变为更小维的数组,好比经常使用的二维下降到一维。


以下的二维数组:


array([[ 5,  2],
       [10,  8],
       [ 3,  1]])


调用:


arr2 = arr.flatten()


变为1维:


array([ 5,  2, 10,  8,  3,  1])



03

排序


在numpy中,如何根据某列对多维数组正确排序,借助 lexsort


以下的二维数组myarray:


[['5', '4', '9', '10'],
 ['23', '7', '3', '5'],
 ['7', '3', '13', '4']


按照第3列从小到大排序:


myarray[np.lexsort(myarray[:,::-3].T)]


结果:


[['23', '7', '3', '5'],
 ['5', '4', '9', '10'],
 ['7', '3', '13', '4']]



04

一个带雷的去重方法


根据某种重复定义,去重,下面提供一种去重方法,可是它会带来另外一个陷阱。


c=np.array(((1,2),(3,4),(5,6),(7,8),(7,8),(3,4),(1,2)))


规定(1,2)元包重复,想拿掉最后一个。


提供一种一行代码去重的方法:


np.array(list(set([tuple(t) for t in c])))


结果:


[[1, 2], [3, 4], [5, 6], [7, 8] ]


这里类型变为list的了,你们忽略这个问题。


我想说的是另外一个问题,这个结果貌似运来元素的顺序未变化。


但,由于经过set类型去重后,原来元素的顺序不给予保证,若是对顺序有要求的数据,通过这种去重后,会变得和原来的排序后的顺序不一致。这是须要注意的!



05

返回值


不光Numpy中,在引用任何其余库,必定要注意调用的接口影响的是参数,仍是返回值。


rslt = np.c_[arr_a,arr_b]   # 返回值是拼接后结果


而有些接口,直接将参数值修改,无返回值或其余返回值,这种须要区别对待。



算法channel会有系统地,认真地推送:基础算法/机器学习/深度学习/spark/tensorflow等全栈内容。期待您的参与!QQ交流群: 646901659 或进入公众号界面->导读系列下,进入微信讨论群。

本文分享自微信公众号 - Python与算法社区(alg-channel)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。