深入理解 NumPy 数组的 shape 属性与多维切片

纸上星河
纸上星河
发布时间:2026-10-11| 5人浏览过
原创

NumPy 是 Python 科学计算的核心库,其中 shape 属性用于描述数组的维度结构。本文通过从一维到四维的创建示例,详细解析 shape 元组的含义,并演示如何利用切片操作提取多维数组中的特定子集,帮助读者建立对 NumPy 数组结构的直观理解。

shape 属性的基本概念

在 NumPy 中,shape 是一个元组(tuple),它描述了数组在每个维度上的长度。理解 shape 是操作多维数据的基础。例如,创建一个包含三个整数的一维数组,其 shape 为 (3,),表示该数组有 3 个元素,且只有一个维度。

import numpy as np
a = np.array([2, 3, 33])
print(a)
# 输出: [ 2  3 33]
print(a.shape)
# 输出: (3,)

一维与二维数组的创建

对于一维数组,可以使用圆括号 () 或方括号 [] 来定义,结果相同。NumPy 提供了便捷的函数来生成特定值的数组,如 np.zeros() 生成全零数组,np.ones() 生成全一数组。

a = np.zeros([1])
b = np.ones([1])
print(a)
# 输出: [ 0. ]
print(b)
# 输出: [ 1. ]

当需要创建二维数组(矩阵)时,必须使用嵌套的方括号。例如,np.ones([2, 3]) 会生成一个 2 行 3 列的矩阵,其 shape 为 (2, 3)。这里的第一个参数指定行数,第二个参数指定列数。

a = np.array([[2, 2, 2], [3, 3, 3]])
print(a)
# 输出:
# [[ 2  2  2]
#  [ 3  3  3]]
print(a.shape)
# 输出: (2, 3)

三维与四维数组的结构解析

随着维度增加,shape 元组中的数字依次对应从外到内的嵌套层级。理解这一点对于调试和数据处理至关重要。

三维数组

三维数组可以看作是由多个二维数组组成的列表。shape 中的第一个数字表示有多少个二维数组,后续两个数字分别表示每个二维数组的行数和列数。

# 创建 2 个 3 行 2 列的二维数组
a = np.ones([2, 3, 2])
print(a)
# 输出显示两个独立的 3x2 矩阵块

通过调整参数顺序,可以改变数组的结构。例如 np.ones([1, 2, 1]) 会生成一个包含 1 个二维数组、该数组有 2 行 1 列的结构。

四维数组

四维数组是三维数组的扩展,shape 包含四个数字。第一个参数指定“大包”的数量,第二个参数指定每个“大包”内“小包”(二维数组)的数量,最后两个参数定义每个小包的行列数。

# 创建形状为 [2, 2, 1, 1] 的四维数组
a = np.ones([2, 2, 1, 1])
print(a)
# 输出通过空行区分不同的层级结构

多维数组的切片操作

NumPy 强大的切片功能允许我们精确提取多维数据中的子集。在切片中,冒号 : 代表选取该维度的所有元素。对于高维数组,切片语法为 array[dim1, dim2, ..., dimN]。

假设我们有一个形状为 [2, 3, 2, 3] 的四维数组 m,其结构可以理解为:2 个大包,每个大包包含 3 个小包,每个小包是一个 2 行 3 列的矩阵。

m = np.ones([2, 3, 2, 3])

# 提取第 1 个大包(索引从0开始,这里取索引1)
print(m[1, :, :, :])
# 结果:输出第 1 个大包内的所有数据,形状为 (3, 2, 3)

通过改变切片中冒号的位置,可以提取不同维度的数据:

  • m[:, 1, :, :]:提取每个大包中第 1 个小包的所有数据。
  • m[:, :, 1, :]:提取每个大包中所有小包的第 1 行数据。
  • m[:, :, :, 1]:提取每个大包中所有小包第 1 列的数据。
# 示例:提取每个大包第 1 个小包
print(m[:, 1, :, :])

# 示例:提取每个大包中所有小包的第 1 行
print(m[:, :, 1, :])

# 示例:提取每个大包中所有小包的第 1 列
print(m[:, :, :, 1])

通过观察切片后的输出形状,可以反向验证对原始数组 shape 结构的理解是否正确。例如,m[:, :, :, 1] 的结果是一个形状为 (2, 3, 2) 的数组,因为它保留了前三个维度,而第四个维度被固定为索引 1。

总结

掌握 NumPy 的 shape 属性和切片操作是高效进行数据科学计算的关键。通过从一维到多维的逐步构建,以及利用切片进行灵活的数据提取,可以极大地提升数据处理效率。建议在实际编程中,多通过 print(array.shape) 和切片实验来直观感受数组结构。

以上就是对 NumPy 中 shape 属性及多维数组切片操作的详细内容,更多关于 NumPy 基础教程的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。