廣播與通用函數
廣播是 NumPy 的核心概念,它允許將標量或數組與具有不同形狀的其他數組執行逐元素操作。通用函數 (ufunc) 是預定義的函數,應用于數組的每個元素。通過結合廣播和 ufunc,可以實現高效且簡潔的數據操作。
通用函數范例:
矢量化乘法:np.multiply(A, B)
元素比較:np.greater(A, B)
數學運算:np.sin(x)
高級索引與切片
高級索引和切片提供了超出標準索引的靈活數據訪問方式。布爾索引選擇滿足特定條件的元素,而花式索引和高級切片允許使用數組或列表索引多個軸上的元素。
高級索引范例:
布爾索引:A[A > 5]
花式索引:A[np.array([0, 2, 4])]
高級切片:A[::2, 1::2]
數組聚合與歸約
聚合函數用于對數組中數據進行分組或匯總。歸約函數將數組中的元素減少為單個標量值。常見的聚合函數包括:
求和:np.sum()
平均值:np.mean()
最大值:np.max()
最小值:np.min()
排序與唯一值
排序算法對數組的元素進行排序,而唯一值函數返回數組中唯一元素的集合。這些功能對于數據分析和數據清理非常有用。
排序范例:
排序數組:np.sort(x)
沿特定軸排序:np.sort(A, axis=1)
唯一值范例:
找出唯一值:np.unique(A)
計數唯一值:np.unique(A, return_counts=True)
廣播、高級索引和聚合的結合
結合廣播、高級索引和聚合可以實現復雜的數據操作。例如,可以對數組中的特定行或列求和,或對滿足特定條件的元素進行計數。
范例:
對每個列求和:np.sum(A, axis=0)
對布爾索引元素求平均值:np.mean(A[A > 5])
性能優化
通過利用 NumPy 的矢量化、廣播和高效的底層實現,可以優化數據操作的性能。其他性能優化技巧包括:
避免創建不必要的副本
使用數組表達式而不是循環
使用 NumPy 的優化的 ufunc
其他高級特性
NumPy 還提供了其他高級特性,例如:
數組廣播
花式索引
線性代數操作
隨機數生成
用例
NumPy 的進階技術在各種應用中都有用,包括:
數據分析與挖掘
科學計算
圖像處理
機器學習