numpy庫
NumPy 庫全面指南
NumPy (Numerical Python) 是 Python 科學計算的基礎庫,提供了高性能的多維數組對象和工具。以下是 NumPy 的核心功能和使用方法。
一、安裝與基礎
1. 安裝 NumPy
pip install numpy
2. 導入 NumPy
import numpy as np # 標準導入方式
二、數組創建
1. 基礎數組創建
# 從列表創建
a = np.array([1, 2, 3]) # 一維數組
b = np.array([[1, 2], [3, 4]]) # 二維數組
# 特殊數組zeros = np.zeros((3, 4)) # 全0數組
ones = np.ones((2, 3)) # 全1數組
empty = np.empty((2, 2)) # 未初始化數組
full = np.full((2, 2), 7) # 填充指定值
eye = np.eye(3) # 單位矩陣
2. 序列數組
# 等差數列
arr = np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
# 等間距數列
lin = np.linspace(0, 1, 5) # [0. , 0.25, 0.5 , 0.75, 1. ]
# 對數間隔
log = np.logspace(0, 2, 3) # [ 1., 10., 100.]
3. 隨機數組
# 均勻分布
rand = np.random.rand(2, 3) # 0-1隨機數# 正態分布
randn = np.random.randn(100) # 標準正態分布# 隨機整數
randint = np.random.randint(0, 10, size=5)
三、數組操作
1. 數組屬性
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.ndim) # 維度: 2
print(arr.shape) # 形狀: (2, 3)
print(arr.size) # 元素總數: 6
print(arr.dtype) # 數據類型: int32/int64
2. 索引與切片
arr = np.array([0, 1, 2, 3, 4, 5])# 基本索引
print(arr[2]) # 2
print(arr[-1]) # 5# 切片
print(arr[1:4]) # [1, 2, 3]
print(arr[::2]) # [0, 2, 4]# 多維數組索引
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2d[1, 2]) # 6
print(arr2d[:, 1]) # [2, 5]
3. 形狀操作
arr = np.arange(6)# 改變形狀
print(arr.reshape(2, 3))
# [[0 1 2]
# [3 4 5]]# 展平數組
print(arr.flatten()) # [0 1 2 3 4 5]# 轉置
arr2d = np.arange(6).reshape(2, 3)
print(arr2d.T)
# [[0 3]
# [1 4]
# [2 5]]
四、數組運算
1. 數學運算
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])# 算術運算
print(a + b) # [5 7 9]
print(a * b) # [4 10 18]
print(a ** 2) # [1 4 9]# 三角函數
print(np.sin(a))# 對數運算
print(np.log(a))
2. 統計運算
arr = np.array([[1, 2], [3, 4]])print(np.sum(arr)) # 10
print(np.mean(arr)) # 2.5
print(np.max(arr)) # 4
print(np.min(arr, axis=0)) # 每列最小值 [1, 2]
print(np.std(arr)) # 標準差
print(np.median(arr)) # 中位數
3. 廣播機制
a = np.array([1, 2, 3])
b = 2# 標量廣播
print(a * b) # [2, 4, 6]# 形狀不同的數組廣播
a = np.array([[1], [2], [3]])
b = np.array([4, 5, 6])
print(a + b)
# [[5 6 7]
# [6 7 8]
# [7 8 9]]
五、線性代數
1. 矩陣運算
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])# 矩陣乘法
print(np.dot(a, b))
# [[19 22]
# [43 50]]# 矩陣轉置
print(a.T)
# [[1 3]
# [2 4]]# 行列式
print(np.linalg.det(a)) # -2.0# 逆矩陣
print(np.linalg.inv(a))
# [[-2. 1. ]
# [ 1.5 -0.5]]
2. 解線性方程組
# 解方程組:
# 3x + y = 9
# x + 2y = 8
A = np.array([[3, 1], [1, 2]])
B = np.array([9, 8])
X = np.linalg.solve(A, B)
print(X) # [2. 3.]
六、、實用技巧
1. 布爾索引
arr = np.array([1, 2, 3, 4, 5])# 條件篩選
print(arr[arr > 3]) # [4, 5]
print(arr[(arr > 2) & (arr < 5)]) # [3, 4]
2. 花式索引
arr = np.arange(12).reshape(3, 4)# 使用索引數組
print(arr[[0, 2]]) # 第0行和第2行
print(arr[:, [1, 3]]) # 第1列和第3列
3.數組切割
import numpy as np
arr = np.arange(36).reshape(6,6)
print(arr)
'''[[ 0 ?1 ?2 ?3 ?4 ?5][ 6 ?7 ?8 ?9 10 11][12 13 14 15 16 17][18 19 20 21 22 23][24 25 26 27 28 29][30 31 32 33 34 35]]'''
arr1 = np.hsplit(arr,2)#水平
print(arr1)
'''[array([[ 0, 1, 2],[ 6, 7, 8],[12, 13, 14],[18, 19, 20],[24, 25, 26],[30, 31, 32]]), array([[ 3, 4, 5],[ 9, 10, 11],[15, 16, 17],[21, 22, 23],[27, 28, 29],[33, 34, 35]])]'''
arr2 = np.vsplit(arr,2)#豎直
print(arr2)
'''[array([[ 0, 1, 2, 3, 4, 5],[ 6, 7, 8, 9, 10, 11],[12, 13, 14, 15, 16, 17]]), array([[18, 19, 20, 21, 22, 23],[24, 25, 26, 27, 28, 29],[30, 31, 32, 33, 34, 35]])]'''
b = np.split(arr,2,axis=0)#0為水平,1為豎直,默認為1
print(b)
'''[array([[ 0, 1, 2, 3, 4, 5],[ 6, 7, 8, 9, 10, 11],[12, 13, 14, 15, 16, 17]]), array([[18, 19, 20, 21, 22, 23],[24, 25, 26, 27, 28, 29],[30, 31, 32, 33, 34, 35]])]'''
e = np.array_split(arr,2,1)
4.數組拼接
import numpy as nparr = np.arange(9).reshape(3,3)arr2 =arr*2
print(arr2)arr3 = np.hstack((arr,arr2))#水平
print(arr3,'\n')arr4 = np.vstack((arr,arr2))#豎直
print(arr4,end='\n')arr6 = np.concatenate((arr,arr2),axis=0)#0為水平,1為豎直,默認為0
print(arr6,end='\n')'''[[ 0 2 4][ 6 8 10][12 14 16]]#原數組[[ 0 1 2 0 2 4][ 3 4 5 6 8 10][ 6 7 8 12 14 16]] #水平[[ 0 1 2][ 3 4 5][ 6 7 8][ 0 2 4][ 6 8 10][12 14 16]]#豎直[[ 0 1 2][ 3 4 5][ 6 7 8][ 0 2 4][ 6 8 10][12 14 16]]#
'''
5.讀取文件
import numpy as np# 讀取簡單文本文件
data = np.loadtxt('data.txt')
print(data)# 指定分隔符(默認是任意空白字符)
data = np.loadtxt('data.csv', delimiter=',')# 跳過標題行
data = np.loadtxt('data.txt', skiprows=1)# 選擇特定列
data = np.loadtxt('data.txt', usecols=(0, 2)) # 讀取第1和第3列# 指定數據類型
data = np.loadtxt('data.txt', dtype=np.float32)
6、數組排序
import numpy as nparr = np.array([3, 1, 4, 2, 5])
sorted_arr = np.sort(arr)
print(sorted_arr) # 輸出: [1 2 3 4 5]
arr = np.array([3, 1, 4, 2, 5])arr = np.array([3, 1, 4, 2, 5])
indices = np.argsort(arr)
print(indices) # 輸出: [1 3 0 2 4]
print(arr[indices]) # 輸出: [1 2 3 4 5]arr = np.array(['apple', 'banana', 'cherry', 'date'])# 創建結構化數組
dtype = [('name', 'S10'), ('age', int), ('score', float)]
values = [('Alice', 25, 88.5), ('Bob', 32, 92.3), ('Charlie', 28, 85.0)]
arr = np.array(values, dtype=dtype)# 按年齡排序
print(np.sort(arr, order='age'))
# [(b'Alice', 25, 88.5) (b'Charlie', 28, 85. ) (b'Bob', 32, 92.3)]# 先按分數降序,再按年齡升序
print(np.sort(arr, order=['score', 'age']))
# [(b'Charlie', 28, 85. ) (b'Alice', 25, 88.5) (b'Bob', 32, 92.3)]# 按字符串長度排序
print(np.sort(arr, key=lambda x: len(x)))
# ['date' 'apple' 'banana' 'cherry']
?
NumPy 是 Python 科學計算生態系統的基石,掌握 NumPy 將為學習 Pandas、SciPy、scikit-learn 等庫打下堅實基礎。