NumPy教程:Python数据科学的核心库

NumPy教程:数据科学核心库

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=kAikBkj
其中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的官方文档是深入学习的好资源。如有疑问,欢迎继续交流!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值