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

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

原文发布于微信公众号 - 算法channel(alg-channel)

原文发表时间:2018-03-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏nnngu

算法02 七大排序之:直接选择排序和堆排序

上一篇总结了交换排序的冒泡排序和快速排序。这一篇要总结的是选择排序,选择排序分为直接选择排序和堆排序,主要从以下几点进行总结。 1、直接选择排序及算法实现 2、...

36570
来自专栏CDA数据分析师

入门 | 一文带你了解Python集合与基本的集合运算

了解 Python 集合: 它们是什么,如何创建它们,何时使用它们,什么是内置函数,以及它们与集合论操作的关系

11300
来自专栏技术沉淀

Python: 函数式编程

map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回,比循环更简洁,更易读。

17640
来自专栏猿人谷

C++ STL算法系列1---count函数

一.count函数 algorithm头文件定义了一个count的函数,其功能类似于find。这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果...

25960
来自专栏赵俊的Java专栏

计算最大值

15030
来自专栏微信公众号:Java团长

Java泛型详解

定义了一个List类型的集合,先向其中加入了两个字符串类型的值,随后加入一个Integer类型的值。这是完全允许的,因为此时list默认的类型为Object类型...

12020
来自专栏小樱的经验随笔

C/C++中连接函数strcat的应用(简单讲解)

有位学弟问到我如何将两个字符连接起来,想想java/python里面可以直接用+连接起来,可是C/C++里面有没有这么方便的做法呢?

12020
来自专栏简书专栏

Numpy入门2

标题中的英文首字母大写比较规范,但在python实际使用中均为小写。 2018年7月26日笔记

13730
来自专栏数据结构与算法

26:统计满足条件的4位数个数

26:统计满足条件的4位数个数 总时间限制: 1000ms 内存限制: 65536kB描述 给定若干个四位数,求出其中满足以下条件的数的个数:  个位数上的...

45540
来自专栏数据结构与算法

06:整数奇偶排序

06:整数奇偶排序 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 给定10个整数的序列,要求对其重新排序。排序要求: 1...

40760

扫码关注云+社区

领取腾讯云代金券