1、普通索引(Basic Indexing)
普通索引是指 使用单个整数或整数切片 来访问数组中的元素。
其行为与 Python 的列表索引非常相似。
1)索引一维数组元素
NumPy 数组的索引 从 0 开始:
第一个元素索引为
0第二个元素索引为
1以此类推
示例:访问第一个元素
import numpy as np arr = np.array([1, 2, 3, 4]) print(arr[0])
示例:访问第二个元素
print(arr[1])
示例:访问第三和第四个元素并相加
print(arr[2] + arr[3])
2)索引二维数组
对于二维数组,可以使用 逗号分隔的索引,格式为:
arr[row_index, col_index]
示例:访问第一行第二列的元素
import numpy as np arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]) print('arr[0, 1]:', arr[0, 1])
示例:访问第二行第五列的元素
print('arr[1, 4]:', arr[1, 4])
3)索引三维数组
三维数组的索引格式为:
arr[dim1, dim2, dim3]
示例:访问第一个二维数组中,第二行第三列的元素
import numpy as np arr = np.array([ [[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]] ]) print(arr[0, 1, 2])
示例说明
arr[0, 1, 2] 的含义:
0:选择第一个二维数组[[1, 2, 3], [4, 5, 6]]
1:选择该二维数组中的第二行[4, 5, 6]
2:选择该行中的第三个元素 → 6
2、高级索引(Advanced Indexing)
高级索引是指 使用数组或布尔值作为索引 来访问数组元素。
与普通索引不同的是:
高级索引返回的是数据的拷贝,而不是视图(view)
1)整数数组索引
可以使用一个 整数数组 来索引目标数组。
示例:使用整数数组索引二维数组(按行)
import numpy as np
a = np.array([[1, 2],
[3, 4],
[5, 6]])
idx = np.array([[0, 2],
[1, 2]])
print(a[idx])输出结果:
[[[1 2] [5 6]] [[3 4] [5 6]]]
📌 注意:
这里的 idx 本身是一个数组,因此不能写成:
a[[0, 2], [1, 2]] # 含义不同
2)花式索引(Fancy Indexing)
花式索引 是高级索引的一种形式,指 使用多个整数数组分别指定每个维度的索引。
其核心特点是:
索引数组中的值作为目标数组对应轴的下标
返回结果是一维数组(按元素一一对应)
示例:花式索引一维与二维数组
import numpy as np
a = np.array([[1, 2],
[3, 4],
[5, 6]])
print(a[[0, 1, 1]])
print("---------")
print(a[[0, 1, 1], [0, 0, 0]])输出:
[[1 2] [3 4] [3 4]] --------- [1 3 3]
解释:
a[[0,1,1]]:按行索引a[[0,1,1],[0,0,0]]:行列一一对应取值
3)布尔索引(Boolean Indexing)
布尔索引 用于根据条件筛选数组中的元素。
其核心思想是:
先生成一个布尔数组(True / False)
再用该布尔数组索引原数组
示例:布尔索引筛选数据
import numpy as np
data = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
mask = data > 5print(data[mask])输出:
[6 7 8]
4)高级索引综合示例
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) # 整数数组索引 indices = np.array([1, 3, 5]) print(arr[indices]) # [2 4 6]# 布尔索引 mask = arr > 5print(arr[mask]) # [6 7 8 9]# 修改指定位置的元素 arr[indices] = 0print(arr)
二维数组高级索引
matrix = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
row_indices = np.array([0, 2])
col_indices = np.array([1, 2])
print(matrix[row_indices, col_indices]) # [2 9]布尔索引修改数组
mask = matrix > 3 matrix[mask] = 0 print(matrix)
输出:
[[1 2 3] [0 0 0] [0 0 0]]
3、负索引(Negative Indexing)
负索引用于 从数组末尾开始访问元素:
-1:最后一个元素-2:倒数第二个元素
示例:访问第二行的最后一个元素
import numpy as np
arr = np.array([[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10]])
print('Last element from 2nd row:', arr[1, -1])输出:
Last element from 2nd row: 10