小议NumPy append() vs Python append()

最近一直在折腾Numpy的路上越走越远,发现有很多东西可以深入研究。今天就来简单介绍一下NumPy 和 Python中append()函数的特点,以及append()的特性是否适合用于大数据的处理。

NumPy 和 Python中append()函数的特点

首先我们来复习一下Python中的append()用法,作为Python中最为常见的插入方法之一,相信大家都不会陌生,肯定在初学时对于这个基础语法有所了解。下面的例子可以让大家有一个回顾:

>>> 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()性能优化

对于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

方法二:创建数组,依次插入

%%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()也是一个不错的选择,有兴趣的读者也可以尝试一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值