【Python学习】NumPy 科学计算入门
目录
前言
NumPy(Numerical Python)是 Python 科学计算、数据分析、机器学习、深度学习的核心基础库,专门用于高效处理多维数组(矩阵)运算,比 Python 原生列表快 10~100 倍,是数据科学必备工具。

1. NumPy 简介与安装
1.1 为什么用 NumPy?
-
高效处理大量数值数据
-
支持多维数组/矩阵
-
提供大量数学函数(无需循环)
-
是 Pandas、Matplotlib、Scikit-learn、TensorFlow 等库的基础
1.2 安装(一行命令)
打开命令提示符/终端运行:
pip install numpy
1.3 导入(固定写法)
import numpy as np # 行业通用简写,必须记住
2. Ndarray 数组对象(NumPy 核心)
ndarray = N-dimensional array(N 维数组),是 NumPy 最核心的数据结构。
特点:
-
所有元素类型必须相同
-
支持快速运算
-
维度:0维(标量)、1维(向量)、2维(矩阵)、3维/高维(张量)
3. 创建数组的 10 种常用方法
3.1 从列表创建(最常用)
# 1维数组
arr1 = np.array([1, 2, 3, 4])
# 2维数组(矩阵)
arr2 = np.array([[1,2], [3,4], [5,6]])
print(arr1)
print(arr2)
3.2 全 0 数组
np.zeros((3, 4)) # 3行4列
3.3 全 1 数组
np.ones((2, 3))
3.4 全为指定值
np.full((2, 2), 10) # 全部填充10
3.5 单位矩阵(对角线为1)
np.eye(3) # 3x3
3.6 等差数列
np.arange(0, 10, 2) # 起始、结束(不含)、步长 → [0 2 4 6 8]
3.7 均分区间(指定个数)
np.linspace(0, 10, 5) # 0~10均分5个点
3.8 随机数组(0~1)
np.random.rand(2, 3)
3.9 正态分布随机数
np.random.randn(3, 3)
3.10 随机整数
np.random.randint(0, 10, size=(2, 3)) # 0~9之间
4. 数组属性(必掌握)
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 print(arr.itemsize)# 每个元素字节数
修改数据类型:
arr.astype(float)
5. 索引与切片(取值/修改)
5.1 1 维数组
arr = np.array([10,20,30,40]) print(arr[0]) # 10 print(arr[1:3]) # [20 30] print(arr[:]) # 全部
5.2 2 维数组(矩阵)
语法:arr[行, 列]
arr = np.array([[1,2,3], [4,5,6], [7,8,9]]) print(arr[0, 1]) # 第0行第1列 → 2 print(arr[1, :]) # 第1行全部 → [4 5 6] print(arr[:, 2]) # 第2列全部 → [3 6 9] print(arr[0:2, 1:3])# 子矩阵
5.3 布尔索引(筛选)
arr = np.array([1,2,3,4,5]) print(arr[arr > 3]) # [4 5]
6. 数组运算(向量化运算)
不需要写循环!自动批量计算
6.1 基础运算
a = np.array([1,2,3]) b = np.array([4,5,6]) print(a + b) # [5 7 9] print(a - b) print(a * b) # 对应相乘 print(a / b) print(a ** 2) # 平方 print(np.sqrt(a)) # 开方
6.2 广播机制(不同形状也能运算)
arr = np.array([[1,2,3], [4,5,6]]) print(arr + 10) # 所有元素+10
7. 通用函数(ufunc)
arr = np.array([1,2,3,4]) np.exp(arr) # 指数 np.log(arr) # 自然对数 np.sin(arr) # 正弦 np.cos(arr) # 余弦 np.round(arr) # 四舍五入
8. 统计函数
arr = np.array([[1,2,3], [4,5,6]])
print(arr.sum()) # 总和
print(arr.mean()) # 均值
print(arr.max()) # 最大值
print(arr.min()) # 最小值
print(arr.std()) # 标准差
print(arr.var()) # 方差
print(np.median(arr)) # 中位数
print(np.argmax(arr))# 最大值索引
print(np.argmin(arr))# 最小值索引
按行/按列计算:
arr.sum(axis=0) # 按列求和 arr.sum(axis=1) # 按行求和
9. 数组形状操作
9.1 重塑(reshape)
arr = np.arange(12) arr.reshape(3,4) # 必须元素数量匹配
9.2 展平(转为1维)
arr.flatten()
9.3 转置(行列互换)
arr.T
9.4 拼接
a = np.array([[1,2]]) b = np.array([[3,4]]) np.hstack((a,b)) # 横向拼接 np.vstack((a,b)) # 纵向拼接
9.5 拆分
arr = np.arange(6).reshape(2,3) np.vsplit(arr, 2) # 垂直拆分 np.hsplit(arr, 3) # 水平拆分
10. 随机数生成(常用)
np.random.seed(10) # 固定随机种子(结果可复现) np.random.rand(2,3) # 0~1均匀分布 np.random.randn(2,3) # 标准正态分布 np.random.randint(0,10,5) # 整数随机数 np.random.choice([1,2,3], size=3) # 随机选择 np.random.permutation(10) # 打乱
11. 线性代数(机器学习必备)
11.1 矩阵乘法
a = np.array([[1,2], [3,4]]) b = np.array([[5,6], [7,8]]) np.dot(a, b) # 矩阵乘法 a @ b # 简写(推荐)
11.2 矩阵的逆
np.linalg.inv(a)
11.3 行列式
np.linalg.det(a)
11.4 特征值与特征向量
np.linalg.eig(a)
11.5 解线性方程组
# 2x + y = 5 # x + 3y = 10 A = np.array([[2,1],[1,3]]) b = np.array([5,10]) x = np.linalg.solve(A, b) print(x)
12. 实战案例
案例 1:数据归一化(标准化)
data = np.array([10, 20, 30, 40, 50]) # 最小-最大归一化 0~1 norm = (data - data.min()) / (data.max() - data.min()) print(norm)
案例 2:简单线性回归(最小二乘法)
求 y = wx + b
x = np.array([1,2,3,4,5]) y = np.array([2,4,6,8,10]) w = np.sum((x - x.mean()) * (y - y.mean())) / np.sum((x - x.mean())**2) b = y.mean() - w * x.mean() print("w =", w) print("b =", b)
13. 常见错误与注意事项
-
列表和数组混用:运算前先转
np.array() -
形状不匹配:reshape 数量必须一致
-
数据类型溢出:注意 int / float
-
视图与副本:切片是视图,修改会影响原数组
arr_copy = arr.copy() # 真正复制 -
除法 0 报错:用
np.where()处理
总结(最核心 5 点)
-
import numpy as np -
创建:
np.array()、np.zeros()、np.ones()、np.arange() -
属性:
shape、ndim、dtype -
运算:向量化运算,不用循环
-
统计:
sum()、mean()、max()、min()、std()
更多推荐


所有评论(0)