NumPy 實戰:十個高頻操作助你輕松搞定數據分析
NumPy(Numerical Python)是Python科學計算生態的核心庫,提供了高性能數組操作和數學函數。相比于Python原生列表,NumPy數組(ndarray)在內存效率和計算速度上都有數量級的提升。
本文將深入剖析NumPy中最常用且最重要的十個操作,幫助你快速掌握科學計算的核心技能!

1. 數組的創建與初始化
數組的創建是所有操作的基礎,NumPy提供了多種方式來初始化數組。
import numpy as np
# 創建全0數組
zeros = np.zeros((3, 4)) # 3行4列全0矩陣
# 創建全1數組
ones = np.ones((2, 5)) # 2行5列全1矩陣
# 創建等差數列
linspace = np.linspace(0, 10, 5) # 從0到10,分成5個等分
# 創建隨機數數組
random = np.random.rand(3, 3) # 3x3均勻分布隨機數
# 創建空數組(未初始化)
empty = np.empty(5) # 長度為5的空數組關鍵點解析:
- np.zeros()和np.ones():常用于初始化結果數組。
- np.linspace():適用于生成等間隔樣本。
- np.random.rand():隨機數生成是數據科學的基礎。
2. 數組的索引與切片
數組的索引和切片是數據訪問的核心操作。
arr = np.array([1, 2, 3, 4, 5])
# 單元素索引
print(arr[2]) # 輸出:3
# 切片操作
print(arr[1:4]) # 輸出:[2 3 4]
# 多維數組切片
matrix = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(matrix[1:, 1:]) # 輸出:[[5 6] [8 9]]關鍵點解析:
- NumPy支持多維索引,切片語法與Python列表類似。
- 切片操作是視圖,不會復制數據,適用于內存優化。
3. 數組的形狀與重塑
數組的形狀決定了數據的組織方式,重塑操作可以改變數據的維度。
arr = np.array([[1, 2, 3],
[4, 5, 6]])
# 查看形狀
print(arr.shape) # 輸出:(2, 3)
# 改變形狀
reshaped = arr.reshape(3, 2)
print(reshaped) # 輸出:[[1 2] [3 4] [5 6]]
# 扁平化數組
flattened = arr.flatten()
print(flattened) # 輸出:[1 2 3 4 5 6]關鍵點解析:
- reshape():改變數組維度,但不改變數據。
- flatten():將多維數組轉換為一維數組。
4. 數組的數值運算
NumPy提供了豐富的數學運算功能,支持向量化操作。
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 基本運算
print(arr1 + arr2) # 輸出:[5 7 9]
print(arr1 * arr2) # 輸出:[4 10 18]
# 數學函數
print(np.sin(arr1)) # 輸出:[0.8415 0.9093 0.1411]
print(np.exp(arr2)) # 輸出:[54.5981 148.4132 403.4288]關鍵點解析:
- NumPy的運算是向量化的,避免了顯式循環,效率極高。
- np.sin()、np.exp()等函數支持對整個數組進行操作。
5. 數組的統計分析
NumPy提供了豐富的統計函數,適用于數據分析。
arr = np.array([1, 2, 3, 4, 5])
# 基本統計量
print(np.mean(arr)) # 輸出:3.0
print(np.median(arr)) # 輸出:3.0
print(np.std(arr)) # 輸出:1.4142
# 最值運算
print(np.min(arr)) # 輸出:1
print(np.max(arr)) # 輸出:5
# 累積運算
print(np.cumsum(arr)) # 輸出:[1 3 6 10 15]關鍵點解析:
- np.mean()、np.median()等函數是數據分析的基礎。
- np.cumsum():計算累積和,常用于時間序列分析。
6. 布爾索引與條件篩選
布爾索引是數據篩選的核心操作。
arr = np.array([1, 2, 3, 4, 5])
# 布爾索引
mask = arr > 3
print(arr[mask]) # 輸出:[4 5]
# 條件篩選
filtered = arr[arr % 2 == 0]
print(filtered) # 輸出:[2 4]關鍵點解析:
- 布爾索引通過布爾數組(True/False)選擇符合條件的元素。
- 常用于數據清洗和特征篩選。
7. 數組的隨機數生成
隨機數生成是科學計算和機器學習的基礎。
# 生成均勻分布隨機數
uniform = np.random.rand(3, 3)
print(uniform) # 輸出:3x3均勻分布隨機數矩陣
# 生成正態分布隨機數
normal = np.random.randn(5) # 5個標準正態分布隨機數
print(normal)關鍵點解析:
- np.random.rand():生成[0,1)區間均勻分布隨機數。
- np.random.randn():生成均值為0,方差為1的正態分布隨機數。
8. 數組的廣播機制
廣播機制是NumPy的核心功能之一,允許不同形狀的數組進行運算。
arr1 = np.array([1, 2, 3])
arr2 = np.array([[4], [5], [6]])
# 廣播運算
result = arr1 + arr2 # arr2被廣播為3x3矩陣
print(result)關鍵點解析:
- 廣播機制允許形狀不同的數組進行運算,但需滿足特定規則。
- 廣播是臨時的,不會改變數組的形狀。
9. 數組的文件操作
NumPy支持高效的文件讀寫操作,適用于大數據處理。
# 保存數組到文件
np.save('array_data.npy', arr)
# 從文件加載數組
loaded_arr = np.load('array_data.npy')
print(loaded_arr)關鍵點解析:
- .npy文件是NumPy的二進制文件格式,讀寫速度快。
- 常用于數據持久化存儲。
10. 矩陣運算與線性代數
NumPy提供了強大的線性代數運算功能。
matrix1 = np.array([[1, 2],
[3, 4]])
matrix2 = np.array([[5, 6],
[7, 8]])
# 矩陣乘法
product = np.dot(matrix1, matrix2)
print(product)
# 特征值分解
eigenvalues, eigenvectors = np.linalg.eig(matrix1)
print(eigenvalues)關鍵點解析:
- np.dot():矩陣乘法,是線性代數的基礎。
- np.linalg模塊提供了豐富的線性代數函數。
結語:從操作到實戰的跨越
通過掌握這10個NumPy核心操作,你已經具備了進行科學計算和數據分析的基礎能力。但需記住:實踐是檢驗真理的唯一標準。建議你:
- 動手實踐:立即在Jupyter Notebook中復現文中代碼。
- 結合業務:將這些操作應用到實際項目中。
- 持續學習:探索NumPy的更多高級功能。
































