使用NumPy 進行高效能數組分組
雖然NumPy 可能不提供專門為數組分組而設計的開箱即用函數,但有是可以有效達成類似目標的通用技術
受Eelco庫的啟發
一種方法受 Eelco Hoogendoorn 庫的啟發,透過利用輸入數組的第一列單調遞增的假設來簡化它。如果沒有,可以先使用 a = a[a[:, 0].argsort()] 進行排序。
np.split(a[:, 1], np.unique(a[:, 0], return_index=True)[1][1:])
唯一識別組
這個程式碼片段利用 np.unique() 來辨識第一列中的唯一值,並傳回它們的索引。這些索引用於將第二列拆分為代表每個群組的單獨子數組。
時間複雜度和性能
此方法表現出 O(n) 複雜度,使其高度高效的。對不同組大小的數組進行的經驗 timeit 測量證實了其相對於 pandas、numpy-indexed 和 defaultdict 等其他方法的性能優勢。
替代解決方案
超越所提出的方法,也可以探索基於 NumPy 的技術(例如numpy_groupies)進行分組
其他注意事項
如果輸入陣列的第一列未排序,建議在分組之前對其進行排序,以確保結果準確。請記住,某些排序演算法(例如 argsort)的時間複雜度為 O(n log(n))。
以上是如何有效地將 NumPy 陣列分組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!