Python数据科学手册:NumPy数组基础操作详解

Python数据科学手册:NumPy数组基础操作详解

PythonDataScienceHandbook jakevdp/PythonDataScienceHandbook: 是一个 Python 数据科学指南,旨在帮助初学者和专业人士了解和掌握数据科学的基本概念和技能。适合对数据科学和机器学习感兴趣的人员,尤其是使用 Python 进行数据处理和分析的人员。 PythonDataScienceHandbook 项目地址: https://gitcode.com/gh_mirrors/py/PythonDataScienceHandbook

引言

在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数组的基础操作是数据科学工作的基石。掌握这些核心概念后,你将能够:

  1. 快速了解数组的基本属性
  2. 精确访问和修改数组元素
  3. 灵活提取子数组
  4. 根据需要改变数组形状
  5. 组合和拆分数组

这些操作虽然看似简单,但它们是构建更复杂数据分析流程的基础组件。建议通过实际练习加深理解,为后续学习更高级的数据分析技术打下坚实基础。

PythonDataScienceHandbook jakevdp/PythonDataScienceHandbook: 是一个 Python 数据科学指南,旨在帮助初学者和专业人士了解和掌握数据科学的基本概念和技能。适合对数据科学和机器学习感兴趣的人员,尤其是使用 Python 进行数据处理和分析的人员。 PythonDataScienceHandbook 项目地址: https://gitcode.com/gh_mirrors/py/PythonDataScienceHandbook

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏珂卿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值