就像你在表格中按行和列号查找信息,或在街道上按门牌号找到特定房屋一样,你需要一种方法来定位并取出NumPy数组中存储的单个值。这个操作用到索引。一维数组的索引最简单的情况是一维数组,它就像一个值列表或序列。在Python中,因此也在NumPy中,索引从0开始。这表示第一个元素在索引0处,第二个在索引1处,依此类推。这通常被称为零基索引。让我们创建一维数组:import numpy as np # 创建一个简单的一维数组 arr1d = np.array([10, 11, 12, 13, 14]) print(arr1d)[10 11 12 13 14]要访问一个元素,在数组名后使用方括号 [],并将索引放在方括号内:# 访问第一个元素 (索引 0) first_element = arr1d[0] print(f"第一个元素 (索引 0): {first_element}") # 访问第三个元素 (索引 2) third_element = arr1d[2] print(f"第三个元素 (索引 2): {third_element}")第一个元素 (索引 0): 10 第三个元素 (索引 2): 12NumPy也支持负数索引,这对于从数组末尾访问元素很方便。索引 -1 表示最后一个元素,-2 表示倒数第二个,依此类推。# 访问最后一个元素 (索引 -1) last_element = arr1d[-1] print(f"最后一个元素 (索引 -1): {last_element}") # 访问倒数第二个元素 (索引 -2) second_last = arr1d[-2] print(f"倒数第二个元素 (索引 -2): {second_last}")最后一个元素 (索引 -1): 14 倒数第二个元素 (索引 -2): 13尝试访问有效范围之外的索引(0到length-1,或-1到-length)将导致 IndexError。确保索引在数组的大小范围内是很重要的。二维数组(矩阵)的索引二维数组,或称矩阵,有行和列。要访问二维数组中的单个元素,你需要同时指定行索引和列索引。同样,行索引和列索引都是零基的。标准语法是 array[行索引, 列索引]。注意方括号内行索引和列索引之间有逗号分隔。让我们创建一个二维数组:# 创建一个2x3数组 (2行, 3列) arr2d = np.array([[1, 2, 3], [4, 5, 6]]) print("原始二维数组:\n", arr2d)原始二维数组: [[1 2 3] [4 5 6]]现在,让我们访问一些元素:# 访问第0行第0列的元素 (左上角) element_00 = arr2d[0, 0] print(f"[0, 0]处的元素: {element_00}") # 访问第1行第2列的元素 (右下角) element_12 = arr2d[1, 2] print(f"[1, 2]处的元素: {element_12}") # 访问第0行第1列的元素 element_01 = arr2d[0, 1] print(f"[0, 1]处的元素: {element_01}")[0, 0]处的元素: 1 [1, 2]处的元素: 6 [0, 1]处的元素: 2可以把第一个索引看作选择行,第二个索引看作选择该行内的列。digraph G { rankdir=LR; node [shape=plaintext]; struct [label=< <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> <TR><TD BGCOLOR="#e9ecef">行\列</TD><TD BGCOLOR="#dee2e6">0</TD><TD BGCOLOR="#dee2e6">1</TD><TD BGCOLOR="#dee2e6">2</TD></TR> <TR><TD BGCOLOR="#dee2e6">0</TD><TD>arr2d[0, 0]<BR/>(值: 1)</TD><TD>arr2d[0, 1]<BR/>(值: 2)</TD><TD>arr2d[0, 2]<BR/>(值: 3)</TD></TR> <TR><TD BGCOLOR="#dee2e6">1</TD><TD>arr2d[1, 0]<BR/>(值: 4)</TD><TD BGCOLOR="#a5d8ff">arr2d[1, 1]<BR/>(值: 5)</TD><TD>arr2d[1, 2]<BR/>(值: 6)</TD></TR> </TABLE> >]; }二维数组索引的可视化表示。行索引在前,列索引在后。突出显示的单元格 arr2d[1, 1] 对应于行索引1和列索引1处的元素。高维数组的索引这个方法很自然地适用于更高维度的数组。对于N维数组,你在方括号内提供N个由逗号分隔的索引: array[index_dim0, index_dim1, ..., index_dimN-1]。考虑一个三维数组(你可以把它看作是二维数组的层或页):# 创建一个2x2x3数组 (2层, 2行, 3列) arr3d = np.array([[[ 0, 1, 2], [ 3, 4, 5]], # 第一层 (索引 0) [[ 6, 7, 8], [ 9, 10, 11]]]) # 第二层 (索引 1) print("原始三维数组形状:", arr3d.shape)原始三维数组形状: (2, 2, 3)要访问一个元素,我们需要三个索引:层、行和列。# 访问第1层、第0行、第2列的元素 element_102 = arr3d[1, 0, 2] print(f"[1, 0, 2]处的元素: {element_102}") # 访问第0层、第1行、第1列的元素 element_011 = arr3d[0, 1, 1] print(f"[0, 1, 1]处的元素: {element_011}")[1, 0, 2]处的元素: 8 [0, 1, 1]处的元素: 4使用 arr[i] 或 arr[i, j] 等索引来访问单个元素,能得到该位置存储的特定值。这是处理NumPy数组中各个数据点最基本的方法。接下来,我们将在此基础上,学习如何使用切片和其他高级索引技术一次选取多个元素。