python的numpy中有哪些常用的的函數
# Python的NumPy中有哪些常用的函數
## 目錄
1. [NumPy簡介](#numpy簡介)
2. [數組創建函數](#數組創建函數)
3. [數組操作函數](#數組操作函數)
4. [數學運算函數](#數學運算函數)
5. [統計函數](#統計函數)
6. [線性代數函數](#線性代數函數)
7. [隨機數生成函數](#隨機數生成函數)
8. [文件輸入輸出函數](#文件輸入輸出函數)
9. [其他實用函數](#其他實用函數)
10. [總結](#總結)
## NumPy簡介
NumPy(Numerical Python)是Python科學計算的基礎庫,提供了高性能的多維數組對象和用于操作這些數組的工具。它是數據科學、機器學習、科學計算等領域的核心庫之一。
NumPy的主要特點包括:
- 強大的N維數組對象ndarray
- 廣播功能函數
- 整合C/C++/Fortran代碼的工具
- 線性代數、傅里葉變換、隨機數生成等功能
```python
import numpy as np # 常規導入方式
數組創建函數
1. 基礎創建函數
函數 |
描述 |
示例 |
np.array() |
從列表或元組創建數組 |
np.array([1,2,3]) |
np.zeros() |
創建全零數組 |
np.zeros((3,3)) |
np.ones() |
創建全1數組 |
np.ones((2,2)) |
np.empty() |
創建未初始化數組 |
np.empty((3,2)) |
np.arange() |
類似range的數組 |
np.arange(0,10,2) |
np.linspace() |
等間隔數組 |
np.linspace(0,1,5) |
np.eye() |
單位矩陣 |
np.eye(3) |
np.diag() |
對角矩陣 |
np.diag([1,2,3]) |
2. 特殊數組創建
# 從已有數據創建
np.copy(a) # 數組副本
np.fromfunction(func, shape) # 通過函數創建
# 網格生成
np.mgrid[0:5,0:5] # 密集網格
np.ogrid[0:5,0:5] # 開放網格
數組操作函數
1. 形狀操作
函數 |
描述 |
示例 |
reshape() |
改變數組形狀 |
arr.reshape(3,4) |
resize() |
改變數組形狀和大小 |
np.resize(arr, (5,5)) |
flatten() |
展平為一維數組 |
arr.flatten() |
ravel() |
返回視圖的展平數組 |
arr.ravel() |
transpose() |
轉置數組 |
arr.transpose() |
swapaxes() |
交換兩個軸 |
arr.swapaxes(0,1) |
2. 數組連接與分割
# 連接
np.concatenate((a1,a2), axis=0)
np.vstack((a1,a2)) # 垂直堆疊
np.hstack((a1,a2)) # 水平堆疊
np.column_stack((a1,a2)) # 按列堆疊
# 分割
np.split(arr, indices_or_sections)
np.vsplit(arr, 3) # 垂直分割
np.hsplit(arr, 2) # 水平分割
3. 數組增刪
np.append(arr, values, axis=None)
np.insert(arr, obj, values, axis=None)
np.delete(arr, obj, axis=None)
np.unique(arr) # 去重
數學運算函數
1. 基礎數學運算
函數 |
描述 |
示例 |
add() |
加法 |
np.add(a,b) |
subtract() |
減法 |
np.subtract(a,b) |
multiply() |
乘法 |
np.multiply(a,b) |
divide() |
除法 |
np.divide(a,b) |
power() |
冪運算 |
np.power(a,2) |
mod() |
取模 |
np.mod(a,3) |
abs() |
絕對值 |
np.abs(a) |
2. 三角函數
np.sin(arr) # 正弦
np.cos(arr) # 余弦
np.tan(arr) # 正切
np.arcsin(arr) # 反正弦
np.arccos(arr) # 反余弦
np.arctan(arr) # 反正切
np.hypot(x1, x2) # 歐幾里得范數
3. 指數對數函數
np.exp(arr) # e的冪次
np.expm1(arr) # exp(x)-1
np.log(arr) # 自然對數
np.log10(arr) # 10為底對數
np.log2(arr) # 2為底對數
np.log1p(arr) # log(1+x)
4. 舍入函數
np.around(arr, decimals=0) # 四舍五入
np.floor(arr) # 向下取整
np.ceil(arr) # 向上取整
np.trunc(arr) # 截斷小數部分
np.rint(arr) # 四舍五入到整數
統計函數
1. 基礎統計
函數 |
描述 |
示例 |
amin() |
沿軸最小值 |
np.amin(arr, axis=0) |
amax() |
沿軸最大值 |
np.amax(arr, axis=1) |
ptp() |
范圍(最大值-最小值) |
np.ptp(arr) |
percentile() |
百分位數 |
np.percentile(arr, 75) |
median() |
中位數 |
np.median(arr) |
mean() |
算術平均數 |
np.mean(arr) |
average() |
加權平均數 |
np.average(arr, weights=w) |
2. 方差與標準差
np.var(arr) # 方差
np.std(arr) # 標準差
np.cov(m, y=None) # 協方差矩陣
np.corrcoef(x, y=None) # 相關系數
3. 直方圖統計
np.histogram(a, bins=10) # 直方圖
np.bincount(x, weights=None) # 整型數組的計數
np.digitize(x, bins) # 返回每個值所屬的bin索引
線性代數函數
1. 矩陣操作
函數 |
描述 |
示例 |
dot() |
點積 |
np.dot(a,b) |
vdot() |
向量點積 |
np.vdot(a,b) |
inner() |
內積 |
np.inner(a,b) |
outer() |
外積 |
np.outer(a,b) |
matmul() |
矩陣乘法 |
np.matmul(a,b) |
tensordot() |
張量點積 |
np.tensordot(a,b) |
2. 矩陣分解與求逆
np.linalg.inv(a) # 矩陣求逆
np.linalg.pinv(a) # 偽逆矩陣
np.linalg.det(a) # 行列式
np.linalg.eig(a) # 特征值和特征向量
np.linalg.svd(a) # 奇異值分解
np.linalg.qr(a) # QR分解
np.linalg.cholesky(a) # Cholesky分解
3. 線性方程組
np.linalg.solve(a, b) # 解線性方程組
np.linalg.lstsq(a, b) # 最小二乘解
np.linalg.norm(x) # 范數計算
隨機數生成函數
1. 基礎隨機數
函數 |
描述 |
示例 |
rand() |
[0,1)均勻分布 |
np.random.rand(3,2) |
randn() |
標準正態分布 |
np.random.randn(100) |
randint() |
隨機整數 |
np.random.randint(0,10,size=5) |
random() |
[0,1)隨機浮點數 |
np.random.random(10) |
choice() |
隨機選擇 |
np.random.choice(a, size=3) |
shuffle() |
隨機打亂 |
np.random.shuffle(arr) |
permutation() |
隨機排列 |
np.random.permutation(10) |
2. 概率分布
# 連續分布
np.random.uniform(low=0.0, high=1.0) # 均勻分布
np.random.normal(loc=0.0, scale=1.0) # 正態分布
np.random.exponential(scale=1.0) # 指數分布
# 離散分布
np.random.binomial(n=10, p=0.5) # 二項分布
np.random.poisson(lam=1.0) # 泊松分布
3. 隨機種子
np.random.seed(42) # 設置隨機種子
np.random.get_state() # 獲取隨機狀態
np.random.set_state(state) # 設置隨機狀態
文件輸入輸出函數
1. 文本文件
函數 |
描述 |
示例 |
loadtxt() |
從文本加載 |
np.loadtxt('data.txt') |
savetxt() |
保存到文本 |
np.savetxt('out.txt', arr) |
genfromtxt() |
從文本生成數組 |
np.genfromtxt('data.csv', delimiter=',') |
2. 二進制文件
np.save('array.npy', arr) # 保存為.npy
np.load('array.npy') # 加載.npy文件
np.savez('arrays.npz', a=arr1, b=arr2) # 保存多個數組
np.savez_compressed('arrays.npz', a=arr1) # 壓縮保存
3. 內存映射
np.memmap(filename, dtype='float32', mode='r', shape=(100,100))
其他實用函數
1. 索引與切片
np.where(condition, [x, y]) # 條件選擇
np.take(a, indices) # 按索引獲取元素
np.select(condlist, choicelist) # 多條件選擇
np.nonzero(a) # 非零元素索引
2. 邏輯運算
np.logical_and(x1, x2)
np.logical_or(x1, x2)
np.logical_not(x)
np.logical_xor(x1, x2)
np.all(a) # 所有元素為True
np.any(a) # 任一元素為True
3. 數組比較
np.equal(a, b) # ==
np.not_equal(a, b) # !=
np.greater(a, b) # >
np.greater_equal(a, b) # >=
np.less(a, b) # <
np.less_equal(a, b) # <=
4. 集合操作
np.intersect1d(ar1, ar2) # 交集
np.union1d(ar1, ar2) # 并集
np.setdiff1d(ar1, ar2) # 差集
np.setxor1d(ar1, ar2) # 對稱差集
np.in1d(ar1, ar2) # 測試成員
5. 廣播與矢量化
np.broadcast(arr1, arr2) # 廣播對象
np.vectorize(pyfunc) # 矢量化函數
總結
NumPy提供了豐富的函數庫,涵蓋了從數組創建、數學運算到線性代數和隨機數生成的各個方面。掌握這些常用函數能夠顯著提高科學計算和數據分析的效率。本文介紹了約150個常用NumPy函數,但NumPy的功能遠不止于此。建議讀者在實際應用中結合官方文檔深入探索更多高級功能。
學習建議
- 從基礎數組操作開始練習
- 熟悉廣播機制和矢量化運算
- 掌握線性代數和統計相關函數
- 在實際項目中應用這些函數
- 查閱官方文檔獲取最新功能
NumPy作為Python科學計算生態系統的基石,其重要性不言而喻。希望本文能幫助您更好地理解和使用NumPy的強大功能。
# 示例:綜合應用
arr = np.random.randn(100, 100) # 創建100x100正態分布數組
arr = arr * 10 + 5 # 線性變換
mean = np.mean(arr) # 計算均值
std = np.std(arr) # 計算標準差
normalized = (arr - mean) / std # 標準化
eigenvalues = np.linalg.eig(normalized) # 特征值分解
注意:本文基于NumPy 1.21+版本,部分函數在早期版本中可能不可用或行為不同。
“`