高效查找NumPy 數組中特定行的實例
使用NumPy 數組時,可能會遇到需要確定是否array 包含特定行,但ndarray 的標準contains 方法引發了問題。本文針對此問題提出了高效且 Python 的解決方案。
一種方法涉及使用 .tolist() 將 NumPy 數組轉換為 Python 列表,並對列表執行成員資格檢查。
a = np.array([[1,2],[10,20],[100,200]]) [1,2] in a.tolist() # Returns True [1,20] in a.tolist() # Returns False
另一種方法是使用數組上的視圖並應用.all(1) 函數將每一行與目標行按元素進行比較.
any((a[:]==[1,2]).all(1)) # Returns True any((a[:]==[1,20]).all(1)) # Returns False
此外,可以在 NumPy 清單上產生以獲得潛在的效能提升。然而,如果沒有儘早找到結果,這種方法可能會效率低。
any(([1,2] == x).all() for x in a) # Stops on first occurrence
最後,NumPy 的邏輯函數提供了一種簡潔的比較方法。
any(np.equal(a,[1,2]).all(1)) # Returns True
基準測試結果表明,無論命中或未命中情況如何,numpy 例程都保持一致的搜尋速度。視圖、邏輯相等和 Python in 運算子方法在效率方面具有可比性,而 NumPy 上的生成器不建議用於全數組搜尋。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3