在数据科学、机器学习和科学计算领域,NumPy 是不可或缺的基础库。作为 Python 数值计算的核心工具,NumPy 提供了高效的多维数组对象和丰富的数学函数,极大提升了数据处理效率。本文将从基础概念到实战应用,全面讲解 NumPy 的核心功能,帮助你快速掌握这一数据科学利器。
一、NumPy 基础入门
1. 安装与导入
NumPy 的安装非常简单,使用 pip 命令即可:
bash
pip install numpy
在代码中导入 NumPy 时,通常使用约定的别名np:
python
import numpy as np
2. 核心数据结构:ndarray
NumPy 的核心是ndarray(N-dimensional array,多维数组)对象,它是一个同类型数据的集合。与 Python 列表相比,ndarray 具有更高的存储效率和运算性能。
创建 ndarray 的基本方法:
python
# 从列表创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1) # 输出:[1 2 3 4 5]
# 创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2)
# 输出:
# [[1 2 3]
# [4 5 6]]
# 查看数组属性
print("维度:", arr2.ndim) # 输出:2
print("形状:", arr2.shape) # 输出:(2, 3)
print("元素数量:", arr2.size) # 输出:6
print("数据类型:", arr2.dtype) # 输出:int64
3. 常用数组创建函数
除了从列表转换,NumPy 还提供了多种便捷的数组创建函数:
python
# 创建全零数组
zeros = np.zeros((2, 3)) # 2行3列的零数组
# 创建全一数组
ones = np.ones((3, 3)) # 3x3的全一数组
# 创建指定范围的数组
range_arr = np.arange(10, 30, 5) # 从10到30,步长5:[10 15 20 25]
# 创建等差数列
linspace = np.linspace(0, 1, 5) # 0到1之间5个等距点:[0. 0.25 0.5 0.75 1. ]
# 创建随机数组
random_arr = np.random.rand(2, 2) # 2x2的随机数组(元素在0-1之间)
二、NumPy 核心操作
1. 数组索引与切片
NumPy 的索引和切片操作与 Python 列表类似,但支持多维索引:
python
# 一维数组索引
arr = np.arange(10)
print(arr[5]) # 输出:5
print(arr[3:7]) # 输出:[3 4 5 6]
# 二维数组索引
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2d[1, 2]) # 输出第二行第三列元素:6
print(arr2d[0:2, 1:3]) # 切片:[[2 3] [5 6]]
# 条件索引
arr = np.arange(10)
mask = arr > 5
print(arr[mask]) # 输出所有大于5的元素:[6 7 8 9]
2. 数组形状操作
调整数组形状是数据处理中的常见需求:
python
arr = np.arange(12)
print(arr.shape) # 输出:(12,)
# 改变形状
reshaped = arr.reshape(3, 4) # 转换为3行4列
print(reshaped.shape) # 输出:(3, 4)
# 展平数组
flattened = reshaped.flatten() # 转换为一维数组
print(flattened.shape) # 输出:(12,)
# 转置数组
transposed = reshaped.T # 行列转置
print(transposed.shape) # 输出:(4, 3)
3. 数组运算
NumPy 支持向量化运算,无需循环即可对整个数组进行操作:
python
arr = np.array([1, 2, 3, 4])
# 基本运算
print(arr + 2) # 所有元素加2:[3 4 5 6]
print(arr * 3) # 所有元素乘3:[3 6 9 12]
print(arr **2) # 所有元素平方:[ 1 4 9 16]
# 数组间运算
arr2 = np.array([5, 6, 7, 8])
print(arr + arr2) # 对应元素相加:[ 6 8 10 12]
print(arr * arr2) # 对应元素相乘:[ 5 12 21 32]
# 常用数学函数
print(np.sin(arr)) # 正弦函数
print(np.log(arr)) # 自然对数
print(np.mean(arr)) # 平均值
print(np.sum(arr)) # 求和
print(np.max(arr)) # 最大值
三、实战案例:数据统计分析
下面通过一个简单的数据分析案例,展示 NumPy 的综合应用:
python
import numpy as np
# 生成模拟数据:100名学生的5门课程成绩(0-100分)
scores = np.random.randint(60, 101, size=(100, 5))
print(f"数据形状:{scores.shape}") # 输出:(100, 5)
# 1. 计算每门课程的平均分
course_avg = np.mean(scores, axis=0)
for i, avg in enumerate(course_avg):
print(f"课程{i+1}平均分:{avg:.2f}")
# 2. 计算每个学生的总分
student_total = np.sum(scores, axis=1)
print(f"学生总分范围:{student_total.min()} - {student_total.max()}")
# 3. 计算总分排名前10的学生
top10_indices = np.argsort(student_total)[-10:][::-1]
print("总分前10的学生索引:", top10_indices)
# 4. 统计每门课程的及格率
pass_count = np.sum(scores >= 60, axis=0)
pass_rate = pass_count / scores.shape[0] * 100
for i, rate in enumerate(pass_rate):
print(f"课程{i+1}及格率:{rate:.2f}%")
# 5. 查找有不及格课程的学生
has_failed = np.any(scores < 60, axis=1)
failed_students = np.where(has_failed)[0]
print(f"有不及格课程的学生数量:{len(failed_students)}")
四、NumPy 优势与扩展应用
1.** 性能优势 **:NumPy 内部使用 C 语言实现,运算速度比纯 Python 快数十倍甚至上百倍,尤其适合大规模数据处理。
2.** 生态集成 **:NumPy 是众多数据科学库的基础,如 Pandas、Matplotlib、Scikit-learn 等都基于 NumPy 构建,掌握 NumPy 是学习这些库的前提。
3.** 内存效率 **:ndarray 采用连续内存存储,且元素类型统一,内存占用远低于 Python 列表。
4.** 扩展技巧 **:
- 利用广播机制处理不同形状数组的运算
- 使用 ufunc(通用函数)实现向量化操作
- 结合 NumPy 的文件操作函数(如
np.save、np.load)高效存储数据
通过本文的学习,你已经掌握了 NumPy 的核心概念和基本操作。NumPy 作为数据科学的基石,其高效的数组操作能力能显著提升数据处理效率。在实际应用中,需要不断练习数组操作技巧,结合具体场景灵活运用各种函数,才能充分发挥 NumPy 的强大功能,为数据分析和科学计算工作提供有力支持。
1091

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



