NumPy教程:Python数据科学的核心库
NumPy(Numerical Python)是Python生态中用于科学计算的基石库,它提供了高性能的多维数组对象和丰富的数学函数,是数据科学、机器学习和工程计算的核心工具。本教程将从基础概念讲起,逐步深入,覆盖安装、数组操作、数学运算和实际应用。文章结构清晰,每个部分都配有代码示例和解释,确保你掌握NumPy的精髓。
1. NumPy简介
NumPy的核心是ndarray(n维数组),它比Python原生列表更高效,因为它:
- 支持向量化操作,避免循环开销。
- 提供广播机制,自动处理不同形状数组的运算。
- 集成C/C++底层优化,计算速度极快。
在数据工程中,NumPy是Pandas、SciPy和Scikit-learn等库的基础。例如,一个数组的形状表示为n×mn \times mn×m,其中nnn是行数,mmm是列数。
2. 安装和导入
NumPy可通过pip安装。在终端运行:
pip install numpy
导入NumPy库时,通常使用别名np:
import numpy as np
这能简化代码,提高可读性。
3. 创建和操作数组
NumPy数组是高效的数据容器。创建数组有多种方式:
- 从列表创建:使用
np.array()函数。 - 特殊数组:如全零数组
np.zeros()或单位矩阵np.eye()。
示例代码:
# 创建一维数组
arr1 = np.array([1, 2, 3])
print("一维数组:", arr1) # 输出: [1 2 3]
# 创建二维数组(矩阵)
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print("二维数组:\n", arr2) # 输出: [[1 2 3] [4 5 6]]
# 创建全零数组,形状为3x2
zeros_arr = np.zeros((3, 2))
print("全零数组:\n", zeros_arr) # 输出: [[0. 0.] [0. 0.] [0. 0.]]
数组属性包括:
shape:数组维度,如2×32 \times 32×3。dtype:数据类型,如整数int32或浮点数float64。size:元素总数。
代码示例:
print("arr2的形状:", arr2.shape) # 输出: (2, 3)
print("arr2的数据类型:", arr2.dtype) # 输出: int64
print("元素总数:", arr2.size) # 输出: 6
4. 数组索引和切片
索引从0开始,切片语法类似Python列表,但支持多维操作:
- 基本索引:获取单个元素。
- 切片:提取子数组。
- 布尔索引:基于条件过滤元素。
示例:
# 获取二维数组的元素
print("arr2[0, 1]:", arr2[0, 1]) # 输出: 2(第一行第二列)
# 切片:提取第一行所有列
print("arr2[0, :]:", arr2[0, :]) # 输出: [1 2 3]
# 布尔索引:筛选大于3的元素
bool_arr = arr2 > 3
print("大于3的元素:", arr2[bool_arr]) # 输出: [4 5 6]
形状操作函数如reshape()可以改变数组维度:
# 将一维数组重塑为3x1
reshaped = arr1.reshape(3, 1)
print("重塑后:\n", reshaped) # 输出: [[1] [2] [3]]
重塑时需满足新形状×元素总数新形状 \times 元素总数新形状×元素总数与原数组一致。
5. 数学运算
NumPy支持元素级运算和矩阵运算,利用广播机制处理不同形状数组:
- 元素级运算:加减乘除,如c=a+bc = a + bc=a+b。
- 矩阵运算:点积、逆矩阵等。
- 广播:自动扩展小数组以匹配大数组。
代码示例:
# 元素级加法
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = a + b
print("a + b:", c) # 输出: [5 7 9]
# 广播示例:标量与数组相乘
d = 2 * a
print("2 * a:", d) # 输出: [2 4 6]
# 矩阵点积(内积)
e = np.array([[1, 2], [3, 4]])
f = np.array([[5, 6], [7, 8]])
g = np.dot(e, f)
print("点积结果:\n", g) # 输出: [[19 22] [43 50]]
点积公式为:
Cij=∑kAikBkjC_{ij} = \sum_{k} A_{ik} B_{kj}Cij=k∑AikBkj
其中CCC是结果矩阵。
6. 高级功能
NumPy包含线性代数、随机数生成和文件I/O模块:
- 线性代数:求逆、特征值等,使用
np.linalg。 - 随机数:生成分布数据,使用
np.random。 - 文件操作:保存和加载数组。
示例代码:
# 求矩阵逆
matrix = np.array([[1, 2], [3, 4]])
inv_matrix = np.linalg.inv(matrix)
print("逆矩阵:\n", inv_matrix) # 输出: [[-2. 1. ] [ 1.5 -0.5]]
# 生成随机数:0到1之间的3x2数组
rand_arr = np.random.rand(3, 2)
print("随机数组:\n", rand_arr) # 输出类似: [[0.42 0.71] [0.15 0.92] [0.83 0.26]]
# 保存和加载数组
np.save('data.npy', matrix) # 保存为.npy文件
loaded = np.load('data.npy')
print("加载的数组:\n", loaded) # 输出原矩阵
7. 实际应用示例
作为数据工程师,我常使用NumPy处理真实数据。以下是一个简单项目:计算数据集的基本统计量。
# 模拟数据集:100个样本,每个样本有3个特征
data = np.random.randn(100, 3) # 标准正态分布
# 计算均值、方差和相关系数
mean = np.mean(data, axis=0) # 沿列求平均
variance = np.var(data, axis=0)
corr_matrix = np.corrcoef(data, rowvar=False) # 相关系数矩阵
print("特征均值:", mean)
print("特征方差:", variance)
print("相关系数矩阵:\n", corr_matrix)
此示例展示了NumPy在数据预处理中的高效性,适用于EDA(探索性数据分析)。
8. 总结
NumPy是Python数据科学的基石,其优势包括:
- 高性能计算:通过向量化避免循环。
- 灵活性:支持复杂数学运算和广播。
- 生态系统集成:无缝衔接Pandas等库。
通过本教程,你已掌握NumPy的核心概念。建议多练习数组操作和数学函数,以提升数据工程技能。NumPy的官方文档是深入学习的好资源。如有疑问,欢迎继续交流!
NumPy教程:数据科学核心库
884

被折叠的 条评论
为什么被折叠?



