这是一篇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] # 返回值是拼接后结果
而有些接口,直接将参数值修改,无返回值或其余返回值,这种须要区别对待。
本文分享自微信公众号 - Python与算法社区(alg-channel)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。