Python数据科学手册:NumPy数组基础操作详解
NumPy是Python数据科学生态系统的核心库,提供了高性能的多维数组对象和工具。本文将深入讲解NumPy数组的基础操作,帮助读者掌握数组处理的核心技能。
数组基本属性
NumPy数组(ndarray)具有多个重要属性,了解这些属性是操作数组的基础:
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) # [0,1,2,3,4,5,6,7,8,9]
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]
多维数组切片
多维切片使用逗号分隔不同维度的切片:
x2 = np.array([[12, 5, 2, 4],
[7, 6, 8, 8],
[1, 6, 7, 7]])
print(x2[:2, :3]) # 前两行前三列
# [[12 5 2]
# [ 7 6 8]]
print(x2[:3, ::2]) # 所有行,每隔一列
# [[12 2]
# [ 7 8]
# [ 1 7]]
print(x2[::-1, ::-1]) # 反转行和列
# [[ 7 7 6 1]
# [ 8 8 6 7]
# [ 4 2 5 12]]
获取行和列
获取整行或整列是常见操作:
print(x2[:, 0]) # 第一列 → [12 7 1]
print(x2[0, :]) # 第一行 → [12 5 2 4]
print(x2[0]) # 简写形式 → [12 5 2 4]
数组变形
NumPy提供了多种改变数组形状的方法:
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])
np.concatenate([x, y]) # [1 2 3 4 5 6]
分割数组
x = np.arange(10)
np.split(x, [3, 7]) # 在索引3和7处分割
# [array([0, 1, 2]), array([3, 4, 5, 6]), array([7, 8, 9])]
总结
本文详细介绍了NumPy数组的基础操作,包括:
- 数组属性的理解与使用
- 单元素索引与修改
- 子数组切片技巧
- 数组形状的改变
- 数组的拼接与分割
这些操作是NumPy数组处理的基础,掌握它们将为后续更复杂的数据处理和分析打下坚实基础。在实际应用中,这些基础操作往往会组合使用,建议读者多加练习以熟练掌握。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考