NumPy 和 pandas 哪個更快?


NumPy 和 pandas 都是資料科學和機器學習技術中必不可少的工具。我們知道 pandas 提供了類似 SQL 表的 DataFrame,允許您進行表格資料分析,而 NumPy 則非常高效地執行向量和矩陣運算。

pandas 提供了許多使用 C 或 Cython 最佳化的函式,這些函式可能比 NumPy 的等效函式(例如從文字檔案讀取文字)更快。

如果您想執行數學運算,例如點積、計算平均值等等,pandas DataFrame 通常會比 NumPy 陣列慢。因為 pandas 正在執行更多操作,例如對齊標籤、處理異構資料等等。

示例

import numpy as np
import pandas as pd

array = np.arange(100, 200)

s = pd.Series(array)

print('Series object time: ',end ='')
%timeit -n10 -r2 s.mean()

print('Numpy array time: ',end ='')
%timeit -n10 -r2 np.mean(array)

解釋

這裡我們建立了一個包含 100 個值的 NumPy 陣列,範圍從 100 到 200,還使用 NumPy 陣列建立了一個 pandas Series 物件。

我們使用內建的 IPython 魔術函式 %timeit 來查詢每個函式消耗的平均時間。計算每個物件資料的平均值。

-n10 用於設定迴圈計數,-r2 用於設定執行計數。

輸出

Series object: 225 µs ± 83 µs per loop (mean ± std. dev. of 2 runs, 10 loops each)
Numpy array: 33.1 µs ± 10.8 µs per loop (mean ± std. dev. of 2 runs, 10 loops each)

我們可以看到 NumPy 陣列和 Series 物件計算平均值所花費的時間。

示例

import numpy as np
import pandas as pd

array = np.arange(100, 200)

s = pd.Series(array)

print('Series object time: ',end ='')
%timeit -n10 -r2 s.std()

print('Numpy array time: ',end ='')
%timeit -n10 -r2 np.std(array)

解釋

在這裡,我們驗證了 NumPy 陣列和 pandas Series 物件計算標準差所花費的時間。我們可以在下面的輸出塊中看到時間戳。

輸出

Series object time: 443 µs ± 26.6 µs per loop (mean ± std. dev. of 2 runs, 10 loops each)
Numpy array time: 104 µs ± 12.1 µs per loop (mean ± std. dev. of 2 runs, 10 loops each)

正如我們在上面兩個示例中看到的,與 NumPy 物件相比,pandas 消耗的平均時間更多。

建立 pandas DataFrame 所花費的時間大約是建立 NumPy 陣列的 6000 倍。Pandas 需要額外的時間來設定索引標籤。

更新於: 2021年11月18日

1K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告