最近一直在折腾Numpy的路上越走越远,发现有不少东西能够深刻研究。今天就来简单介绍一下NumPy 和 Python中append()函数的特色,以及append()的特性是否适合用于大数据的处理。python
首先咱们来复习一下Python中的append()用法,做为Python中最为常见的插入方法之一,相信你们都不会陌生,确定在初学时对于这个基础语法有所了解。下面的例子可让你们有一个回顾:shell
>>> a = []
>>> a.append([1,2,3])
>>> a.append([1,2,3])
>>> a
[[1, 2, 3], [1, 2, 3]]
复制代码
那么NumPy是否也能够实现一样的功能呢?答案应该是确定的。这个功能应该也是任何数学包都会包含的。具体以下:数组
>>> b = np.empty([0,3], dtype=int)
>>> b_1 = np.append(b,[[1,2,3]], axis=0)
>>> b_2 = np.append(b_1,[[1,2,3]], axis=0)
>>> b_1
[[1 2 3]]
>>> b_2
[[1 2 3]
[1 2 3]]
复制代码
对于NumPy中append()方法的性能,实际上是饱受诟病的,特别是在处理一些数据量比较大的问题时,耗时是个使人头疼的问题。接下来就拿循环append来作个实验好了。 针对这种问题,其实我我的并不推荐使用这种方法。相对来讲,先插入列表中,以后再将其转换为一个NumPy的数组会更快速一些。 方法一:插入列表,转换为数组性能优化
%%timeit
list_a = []
for i in range(10000):
list_a.append([1,2,3])
list_a = np.asarray(list_a)
#100 loops, best of 3: 5.51 ms per loop
复制代码
方法二:建立数组,依次插入bash
%%timeit
list_b = np.empty([0,3], dtype=int)
for i in range(10000):
list_b = np.append(list_b,[1,2,3])
#10 loops, best of 3: 81.4 ms per loop
复制代码
通过两次实验,咱们能够发现先后两次之间耗时差距仍是很悬殊的。假若处理更加复杂的数据,那么时间和算力上的浪费就会显得更加严重。综上,下一个比较武断的结论:在插入数据,特别是数据量很大的时候,NumPy的append方法并无明显的优点,推荐使用方法一。另外,NumPy的concatenate()也是一个不错的选择,有兴趣的读者也能够尝试一下。app