一、引 言
在数据科学和数值计算领域,NumPy数组是一种核心数据结构,它以其高效、灵活的特点而被广泛使用。NumPy数组的维度与轴概念,是理解和操作这种数据结构的关键。维度定义了数组的形状,而轴则为我们在多维空间中导航提供了方向。掌握如何通过索引访问多维数组中的元素,是利用NumPy进行数据分析和算法开发的基础。本文将深入探讨NumPy数组的维度与轴的概念,以及如何通过它们来访问和操作数组中的元素,从而为读者打下深入理解数据结构的坚实基础
二、维度:数组的多维性质
维度是描述数组形状的一个关键属性。
一维数组:
也称为向量,只具有一个维度,其中的元素可以通过一个索引来访问。这和我们在学习Python列表时的操作类似。
二维数组:
也称为矩阵,具有两个维度:行和列,元素通过两个索引来访问。
例如,如果a.ndim为2,那么数组a就是一个二维数组。如果a.shape为(3, 4),那么表明这个二维数组具有3行4列。
例:
三维数组:
NumPy的三维数组是一个在三个维度上都有大小(或长度)的数组结构。你可以把它想象成一个由多个二维数组(矩阵)堆叠而成的数据集合,其中每个二维数组都是该三维数组的一个“层”。
以下是一个由正整数构成的形状为(3,2,4)的三维数组的例子:
在这个例子中,a是一个三维数组,它有3个2x4的二维数组作为“层”。ndim属性告诉我们这个数组有三个维度,而shape属性则给出了这三个维度的大小,即3个“层”,每层有2行,每行有4个元素。
三、轴:维度的索引
轴是与数组的维度相对应的索引,用于在特定方向上访问和操作数组元素。
在NumPy中,轴是从0开始计数的。对于一维数组,只有一个轴,即轴0。
对于二维数组,有两个轴:
轴0代表行方向,轴1代表列方向。
三维数组则具有三个轴:轴0、轴1和轴2,分别对应不同的维度方向。
轴0:对应着三维数组中的“层”方向。在形状为(5,2,3)的数组中,轴0的长度为5,表示有5个二维数组(或称为“层”)。
轴1:对应着每个二维数组中的“行”方向。在形状为(5,2,3)的数组中,轴1的长度为2,表示每个二维数组有2行。
轴2:对应着每个二维数组中的“列”方向。在形状为(5,2,3)的数组中,轴2的长度为3,表示每个二维数组的每行有3个元素。
例如:
运行结果:
接上面,进一步用交互式操作:
四、数组的访问
关于NumPy数组的访问,我们可以与Python的原生列表(包括嵌套列表)进行对比来理解。以下是一维数组、二维数组和三维数组的访问方式:
1. 一维数组的访问
NumPy一维数组与Python列表非常相似,可以通过索引来访问数组中的元素。
2. 二维数组的访问
在二维数组中,b[i,j] 表示访问数组 b 的第 i 行和第 j 列的元素(从编程的角度看,索引从 0 开始)。在这种表示法中,i 是行索引,j 是列索引。需要注意的是,在某些编程语言中,如 Python 的原生列表,访问二维数组的元素时,应该使用 b[i][j] 的形式。但是,对于 NumPy 数组等支持多维索引的数据结构,可以使用 b[i,j] 的形式来访问元素。
当然,numpy的数组也可以用形如b[i][j]来访问。
3. 三维数组的访问
三维数组可以看作是由多个二维数组(即层)组成的数组。这种理解有助于直观地认识三维数组的结构。
三维数组中的每个元素通过三个索引来访问。第一个索引表示二维数组(层)的索引,第二个索引表示行索引,第三个索引表示列索引。
4.更高维度的数组的访问
对于更高维度的数组,如四维或五维数组,访问方式可以依此类推。每个额外的维度都可以通过增加一个索引来访问。
以四维数组为例,假设我们有一个形状为 (a, b, c, d) 的四维数组 arr,其中 a、b、c 和 d 分别代表四个维度的大小。将数组的访问与轴(axis)的概念联系起来是很有帮助的。
对于四维数组,我们可以将其想象为具有以下四个轴:
轴0:具有大小 a,可以看作是包含三维数组(或称为“层”)的序列。
轴1:具有大小 b,在每个三维层内,可以看作是包含二维数组(或称为“面”)的序列。
轴2:具有大小 c,在每个二维面内,可以看作是包含一维数组(或称为“行”)的序列。
轴3:具有大小 d,在每个一维行内,是实际的元素。
当我们访问四维数组中的元素时,提供的四个索引分别对应于这四个轴。例如,arr[i, j, k, l] 中的 i 对应于轴0,j 对应于轴1,k 对应于轴2,l 对应于轴3。
同样地,对于五维数组,我们可以增加一个额外的轴:
轴4:具有大小 e,在每个四维“体”内(如果我们将四维数组想象为一个“体”),是包含三维数组(或称为“层”)的序列。
访问五维数组中的元素时,提供的五个索引分别对应于这五个轴。例如,arr[i, j, k, l, m] 中的 m 对应于轴4。
总的来说,无论数组的维度有多高,我们都可以通过提供与数组轴数量相等的索引来访问其中的元素。每个索引对应数组的一个轴,索引的范围从 0 到该轴大小减 1。理解轴的概念有助于我们更好地理解和操作多维数组,因为轴为我们提供了一种直观的方式来思考和描述数组的结构和访问方式。
五、结束语
通过本文的探讨,我们深入理解了NumPy数组的维度与轴的概念,以及如何通过它们来访问和操作数组中的元素。这些核心概念是掌握NumPy数据结构的基础,也是进行数据科学和数值计算的重要基石。希望本文能够帮助读者更好地理解和应用NumPy数组,为他们在数据分析和算法开发领域的进一步探索打下坚实的基础。在未来的学习和实践中,不断加深对这些概念的理解和应用,将使我们能够更加高效地处理和分析数据,从而洞察数据的内在价值。
------------
推荐: