本文共 2304 字,大约阅读时间需要 7 分钟。
在 NumPy 中,索引是访问、修改和切片数组元素的核心工具。NumPy 提供了比 Python 列表更强大的索引功能,能够处理多维数组和多种索引方式。本文将详细介绍 NumPy 数组索引的常见技巧。
基本索引与 Python 列表类似,支持整数索引和切片操作。
对于一维数组,索引操作非常简单。
import numpy as np# 创建一维数组arr = np.array([10, 20, 30, 40, 50])# 访问单个元素print(arr[0]) # 输出 10print(arr[2]) # 输出 30# 切片操作print(arr[1:4]) # 输出 [20, 30, 40] (从索引1到3的元素)print(arr[:3]) # 输出 [10, 20, 30] (前3个元素)print(arr[::2]) # 输出 [10, 30, 50] (间隔为2)
对于二维数组,索引通过行和列来访问元素。
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 访问单个元素print(arr[0, 1]) # 输出 2 (第1行第2列的元素)# 访问整行或整列print(arr[1, :]) # 输出 [4, 5, 6] (第2行的所有元素)print(arr[:, 2]) # 输出 [3, 6, 9] (第3列的所有元素)# 切片操作print(arr[0:2, 1:3]) # 输出 [[2, 3], [5, 6]] (第1到第2行,第2到第3列)
对于高维数组,索引方式类似,但维度数增加。
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])# 访问单个元素print(arr[0, 1, 1]) # 输出 4 (第1组第2行第2列的元素)
布尔索引通过生成布尔数组来筛选数组中的元素。
arr = np.array([10, 20, 30, 40, 50])# 生成布尔条件数组mask = arr > 25# 使用布尔数组索引print(arr[mask]) # 输出 [30, 40, 50] (筛选出大于25的元素)# 直接写条件表达式print(arr[arr > 25]) # 输出 [30, 40, 50]# 对于二维数组也可以使用布尔索引arr = np.array([[10, 20, 30], [40, 50, 60], [70, 80, 90]])# 筛选出大于30的元素print(arr[arr > 30]) # 输出 [40, 50, 60, 70, 80, 90]
花式索引允许通过整数数组来访问多个元素。
arr = np.array([10, 20, 30, 40, 50])# 使用整数数组索引indices = [0, 2, 4]print(arr[indices]) # 输出 [10, 30, 50]
arr = np.array([[10, 20, 30], [40, 50, 60], [70, 80, 90]])# 行索引和列索引rows = [0, 2]cols = [1, 2]print(arr[rows, cols]) # 输出 [20, 30, 80, 90]
np.newaxis 增加维度np.newaxis 用于在数组中添加新维度,用于广播或形状转换。
arr = np.array([10, 20, 30])# 转换为行向量arr_2d = arr[np.newaxis, :]print(arr_2d) # 输出 [[10, 20, 30]]# 转换为列向量arr_2d_col = arr[:, np.newaxis]print(arr_2d_col) # 输出 [[10], [20], [30]]
NumPy 允许通过索引直接修改数组元素。
arr = np.array([10, 20, 30, 40, 50])# 修改数组元素arr[1:3] = [200, 300]print(arr) # 输出 [10, 200, 300, 40, 50]
np.index_exp 索引复杂数组np.index_exp 提供了简洁的方式来创建复杂索引。
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 创建复杂索引print(arr[np.index_exp[1, 1]]) # 输出 5 (第2行第2列的元素)
通过索引和切片改变数组形状。
arr = np.array([1, 2, 3, 4, 5, 6])# 修改数组形状reshaped_arr = arr.reshape(2, 3)print(reshaped_arr) # 输出 [[1, 2, 3], [4, 5, 6]]
NumPy 提供了强大的索引机制,使得数据处理更加高效。常见索引方式包括基本索引、布尔索引、花式索引、np.newaxis、索引更新以及 np.index_exp 等。掌握这些技巧能够大大提升 NumPy 应用程序的性能和效率。
转载地址:http://jwnfk.baihongyu.com/