这是一篇Numpy中经常使用的API的不完全总结,欢迎补充和指导。
01
类型转化
凡是使用Numpy的小伙伴,无不遇到类型转化这个问题,并且经常需要通过调试才得以修正。
为什么这个问题如此棘手?
请看, arr = np.array([9,10,'2',10],只有一个元素为str类型,那么numpy会立即将所有元素转为str型。
在工作中,我们经常需要添加整列添加元素,这种操作可能会改变原来元素的类型。如果,你的操作涉及到数值上的加减乘除,添加元素后意外变为str型后,就会抛出异常。
这时候,需要进行显示类型转化:
arr = arr.astype(np.float64) # 直接转化为float64类型
02
维数变化
有时候需要将多维数组变为更小维的数组,比如常用的二维降低到一维。
如下的二维数组:
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] # 返回值是拼接后结果
而有些接口,直接将参数值修改,无返回值或其他返回值,这种需要区别对待。
本文分享自 程序员郭震zhenguo 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!