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