Pandas apply 與 np.vectorize 的表現比較
據觀察,np.vectorize() 可以明顯快於 df。基於 Pandas DataFrame 中的現有欄位建立新欄位時使用 apply() 。觀察到的性能差異源自於這兩種方法所採用的底層機制。
df.apply() 與 Python 層級循環
df.apply() 本質上建立迭代 DataFrame 的每一行的 Python 層級循環。正如提供的基準測試中所演示的,與真正的向量化計算相比,Python 級循環(例如列表推導式和映射)都相對較慢。
np.vectorize() vs df.apply()
np.vectorize() 將使用者定義函數轉換為通用函數 (ufunc)。 Ufunc 經過高度最佳化,可以利用基於 C 的程式碼和最佳化演算法對 NumPy 陣列執行逐元素操作。這與 df.apply() 形成對比,df.apply() 對 Pandas Series 物件進行操作並產生額外的開銷。
真正的向量化:最佳效能
真正有效率的列創建,強烈建議在 NumPy 中進行向量化計算。 numpy.where 等操作以及使用 df["A"] / df["B"] 進行直接逐元素除法的速度非常快,並且避免了與循環相關的開銷。
Numba 最佳化
為了提高效率,可以使用 Numba 進一步最佳化循環,Numba 是將 Python 函數轉換為最佳化的 C 程式碼的編譯器。 Numba 可以將執行時間減少到微秒,顯著優於 df.apply() 和 np.vectorize()。
結論
雖然np.vectorize() 可能提供對df.apply() 進行了一些改進,它並不是NumPy 中矢量化計算的真正替代品。為了實現最大效能,請利用 Numba 最佳化或 NumPy 中的直接向量化操作在 Pandas DataFrames 中建立新欄位。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3