Python数据科学手册:NumPy数组基础操作详解
引言
在Python数据科学领域,NumPy数组是最基础也是最重要的数据结构之一。几乎所有高级数据分析工具(如Pandas)都是基于NumPy数组构建的。本文将深入讲解NumPy数组的基本操作,包括数组属性、索引、切片、重塑以及连接与分割等核心概念。
数组属性
NumPy数组具有多个重要属性,可以帮助我们快速了解数组的基本信息:
import numpy as np
np.random.seed(0) # 设置随机种子保证结果可复现
# 创建不同维度的数组
x1 = np.random.randint(10, size=6) # 一维数组
x2 = np.random.randint(10, size=(3, 4)) # 二维数组
x3 = np.random.randint(10, size=(3, 4, 5)) # 三维数组
# 查看数组属性
print("x3维度数:", x3.ndim)
print("x3形状:", x3.shape)
print("x3元素总数:", x3.size)
输出结果:
x3维度数: 3
x3形状: (3, 4, 5)
x3元素总数: 60
其他重要属性包括:
dtype
: 数组元素的数据类型itemsize
: 每个元素占用的字节数nbytes
: 数组总占用字节数(等于itemsize × size)
数组索引
NumPy数组的索引方式与Python列表类似,但支持更丰富的多维索引功能。
一维数组索引
x1 = np.array([5, 0, 3, 3, 7, 9])
print(x1[0]) # 第一个元素 → 5
print(x1[-1]) # 最后一个元素 → 9
多维数组索引
对于多维数组,使用逗号分隔的索引元组:
x2 = np.array([[3, 5, 2, 4],
[7, 6, 8, 8],
[1, 6, 7, 7]])
print(x2[0, 0]) # 第一行第一列 → 3
print(x2[2, -1]) # 最后一行最后一列 → 7
注意:NumPy数组是固定类型的,如果尝试将浮点数存入整数数组,值会被截断:
x1[0] = 3.14159 # 实际存储的是3
数组切片
切片操作允许我们访问数组的子集,语法为start:stop:step
。
一维数组切片
x = np.arange(10)
print(x[:5]) # 前5个元素 → [0 1 2 3 4]
print(x[5:]) # 第5个之后元素 → [5 6 7 8 9]
print(x[4:7]) # 中间子数组 → [4 5 6]
print(x[::2]) # 每隔一个元素 → [0 2 4 6 8]
print(x[::-1]) # 反转数组 → [9 8 7 6 5 4 3 2 1 0]
多维数组切片
多维切片使用逗号分隔不同维度的切片:
print(x2[:2, :3]) # 前两行前三列
# 输出:
# [[3 5 2]
# [7 6 8]]
print(x2[::-1, ::-1]) # 行列同时反转
# 输出:
# [[7 7 6 1]
# [8 8 6 7]
# [4 2 5 3]]
访问整行或整列
使用冒号:
可以访问整行或整列:
print(x2[:, 0]) # 第一列 → [3 7 1]
print(x2[0, :]) # 第一行 → [3 5 2 4]
数组重塑
改变数组形状是数据预处理中的常见操作:
x = np.arange(12)
x_2d = x.reshape(3, 4) # 转换为3行4列的二维数组
x_3d = x.reshape(2, 3, 2) # 转换为2×3×2的三维数组
注意:重塑操作必须保持元素总数不变。
数组连接与分割
连接数组
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
z = np.concatenate([x, y]) # [1 2 3 4 5 6]
对于多维数组,可以指定连接轴:
grid = np.array([[1, 2, 3], [4, 5, 6]])
np.concatenate([grid, grid], axis=0) # 沿行方向连接
np.concatenate([grid, grid], axis=1) # 沿列方向连接
分割数组
x = [1, 2, 3, 99, 99, 3, 2, 1]
x1, x2, x3 = np.split(x, [3, 5]) # 在索引3和5处分割
# x1=[1 2 3], x2=[99 99], x3=[3 2 1]
总结
NumPy数组的基础操作是数据科学工作的基石。掌握这些核心概念后,你将能够:
- 快速了解数组的基本属性
- 精确访问和修改数组元素
- 灵活提取子数组
- 根据需要改变数组形状
- 组合和拆分数组
这些操作虽然看似简单,但它们是构建更复杂数据分析流程的基础组件。建议通过实际练习加深理解,为后续学习更高级的数据分析技术打下坚实基础。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考