Numpy|需要信手拈来的功能

时间:2022-05-06
本文章向大家介绍Numpy|需要信手拈来的功能,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

这是一篇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] # 返回值是拼接后结果

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