NumPy - 索引
索引是指在有序列表或数据结构(例如树、列表、字符串、数组、图、矩阵等)中查找或访问特定项目或位置。这种技术使我们能够从数据集中选择一个或一组元素。
NumPy 中的索引
NumPy 索引是一种使用位置访问或更改数组中特定值的方法。每个位置都有一个称为索引的数字。正数从头开始计数(0、1、2),负数则从后往前计数(-1 表示最后一个,-2 表示倒数第二个,以此类推)。
在 NumPy 中,索引在处理大型数组时发挥着重要作用。它通过直接引用数组位置来简化数据操作并加快分析速度。这使得数据操作和分析速度更快。
Python 使用索引从列表或元组中从索引 0 开始获取项目。相比之下,NumPy 索引适用于多维数组,并提供更高级的技术。这些技术包括切片、布尔索引和高级索引。

简单索引
NumPy 中的简单索引允许您使用数组的位置来访问特定项目。对于一维数组,使用单个索引,例如 arr[2]。对于二维数组,您必须同时提供行索引和列索引,例如 arr[1, 2]。对于三维数组,你需要提供深度、行和列索引,如下所示:arr[2, 0, 1]。
让我们举几个例子来理解简单的索引 -
使用索引访问一维数组
假设我们有一个包含蔬菜和水果的购物清单。假设我们想访问购物清单中的香蕉,我们使用 arr[3],其中 3 是香蕉的索引。以下是代码:
import numpy as np grocery_list = ['carrot', 'beetroot', 'brinjal', 'banana', 'mango', 'potato', 'apple'] arr = np.array(grocery_list) print(arr[3])
以下是上述代码的输出:
banana
使用索引访问二维数组
让我们在成绩册上创建一个二维数组,其中每一行代表一个学生,每一列代表该学生在不同科目的考试成绩。我们需要获取学生 2 在第三门科目的成绩。
获取学生 2 的成绩(索引 1)和第三列(科目 3)的成绩,即"78"(索引 2),我们使用 student_score[1,2]。

import numpy as np student_score = np.array([['99', '87', '63'], ['100', '98', '78'], ['95', '100', '76']]) print("学生 2 的成绩第三门科目:", student_score[1,2])
上述代码的输出如下:-
学生 2 第三门科目的成绩:78
使用索引访问三维数组
首先,我们使用 arange() 函数创建一个一维数组,其中包含从 1 到 26 的数字序列,然后使用 reshape() 函数将其转换为三维数组。使用索引,我们最终将根据元素的位置访问三维数组中的特定元素。
要访问位于第三个深度(索引 2)、第 0 行和第 3 列(索引 2)的元素,我们使用 arr_3d[2, 0, 2]。
import numpy as np arr = np.arange(27) arr_3d = arr.reshape(3,3,3) print("三维数组为: ", arr_3d) print("元素:",arr_3d[2,0,2])
上述代码的输出如下:
元素:20
负索引NumPy
我们使用负索引从数组末尾访问元素。索引 -1 表示数组中的最后一个元素,-2 表示倒数第二个元素,依此类推。它主要用于在多维数组中以相反的顺序访问元素。
示例
以下是 NumPy 中使用负索引的示例 -
import numpy as np arr = np.array([10, 20, 30, 40, 50]) print(arr[-1]) print(arr[-3])
以下是上述代码的输出 -
50 30
NumPy 中的索引类型
NumPy 提供多种访问和操作数组项的方法。从简单索引到高级索引,它们为您提供了更大的灵活性和对数据的控制。以下是索引类型 -
基本索引:基本索引涉及使用整数或切片来获取特定元素或范围。此方法会生成原始数组的视图。
高级索引:使用此方法,您可以使用索引数组或列表提取元素。这可以生成原始数组的副本,并允许更复杂的选择,例如非连续元素。
字段访问:字段访问用于结构化数组,以访问或操作数组的特定字段。它提供了一种处理异构数据(类似于表中的列)的有效方法。
基本索引
基本索引使用整数或切片对象来访问数组中的单个或一组元素。使用以下方法之一时,将应用基本切片:
切片对象:使用 start: stop: step 格式创建。
单个整数:访问特定索引处的元素。
整数与切片对象的组合:整数与切片对象的混合(例如,start: stop,或包含两者的元组)。
基本切片生成的所有数组始终是原始数组的视图。
示例:使用 Start、Stop 和 Step 参数进行切片
在下面的示例中,arange() 函数准备了一个 ndarray 对象。然后定义一个切片对象,其起始值、终止值和步长分别为 2、7 和 2。
当将此切片对象传递给 ndarray 时,会从索引 2 开始到索引 7 的部分(步长为 2)被切片。
import numpy as np a = np.arange(12) print(a) #使用起始:终止:步长格式 print(a[2:7:2])
以下是上述代码的输出 -
[ 0 1 2 3 4 5 6 7 8 9 10 11] [2 4 6]
示例:访问特定行和元素
让让我们创建一个二维数组,用于表示教室座位表,其中每行代表座位排,每列代表单个座位。现在,让我们使用单个整数提取特定行和特定座位。
arr_2d[2, 0] 访问第 3 行第 1 列的元素(索引从 0 开始)。以下是代码 -
import numpy as np arr = np.arange(12) arr_2d = arr.reshape(3, 4) print("arr_2d: ",arr_2d) #使用单个整数 print("第 8 个位置的元素是:",arr_2d[2,0])
以下是上述代码的输出 -
arr_2d: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] 第 8 个位置的元素是:8
示例:重塑和元素选择
在下面的代码中,我们创建了一个三维数组,并使用 arr_3d[1, 2:4] 访问第二行(索引 1)中从列索引 2 到(但不包括)索引 4 的元素。
import numpy as np arr = np.arange(12) arr_3d = arr.reshape(3, 4) print(arr_3d[1, 2:4])
以下是上述代码的输出 -
[6 7]