淺議Python append()與NumPy append()

最近一直在折騰Numpy的路上越走越遠,發現有不少東西能夠深刻研究。今天就來簡單介紹一下NumPy 和 Python中append()函數的特色,以及append()的特性是否適合用於大數據的處理。python

NumPy 和 Python中append()函數的特色

首先咱們來複習一下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()性能優化

對於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

相關文章
相關標籤/搜索