- NumPy 教程
- NumPy - 首页
- NumPy - 简介
- NumPy - 环境
- NumPy 数组
- NumPy - Ndarray 对象
- NumPy - 数据类型
- NumPy 创建和操作数组
- NumPy - 数组创建例程
- NumPy - 数组操作
- NumPy - 从现有数据创建数组
- NumPy - 从数值范围创建数组
- NumPy - 迭代数组
- NumPy - 数组重塑
- NumPy - 数组连接
- NumPy - 数组堆叠
- NumPy - 数组分割
- NumPy - 数组扁平化
- NumPy - 数组转置
- NumPy 索引和切片
- NumPy - 索引和切片
- NumPy - 高级索引
- NumPy 数组属性和操作
- NumPy - 数组属性
- NumPy - 数组形状
- NumPy - 数组大小
- NumPy - 数组步长
- NumPy - 数组元素大小
- NumPy - 广播
- NumPy - 算术运算
- NumPy - 数组加法
- NumPy - 数组减法
- NumPy - 数组乘法
- NumPy - 数组除法
- NumPy 高级数组操作
- NumPy - 交换数组轴
- NumPy - 字节交换
- NumPy - 复制和视图
- NumPy - 元素级数组比较
- NumPy - 数组过滤
- NumPy - 数组连接
- NumPy - 排序、搜索和计数函数
- NumPy - 数组搜索
- NumPy - 数组并集
- NumPy - 查找唯一行
- NumPy - 创建日期时间数组
- NumPy - 二元运算符
- NumPy - 字符串函数
- NumPy - 数学函数
- NumPy - 统计函数
- NumPy - 矩阵库
- NumPy - 线性代数
- NumPy - Matplotlib
- NumPy - 使用 Matplotlib 绘制直方图
- NumPy - NumPy 的 I/O 操作
- NumPy 排序和高级操作
- NumPy - 数组排序
- NumPy - 沿轴排序
- NumPy - 使用花式索引排序
- NumPy - 结构化数组
- NumPy - 创建结构化数组
- NumPy - 操作结构化数组
- NumPy - 字段访问
- NumPy - 记录数组
- Numpy - 加载数组
- Numpy - 保存数组
- NumPy - 将值追加到数组
- NumPy - 交换数组的列
- NumPy - 向数组插入轴
- NumPy 处理缺失数据
- NumPy - 处理缺失数据
- NumPy - 识别缺失值
- NumPy - 删除缺失数据
- NumPy - 填充缺失数据
- NumPy 性能优化
- NumPy - 使用数组进行性能优化
- NumPy - 使用数组进行矢量化
- NumPy - 数组的内存布局
- Numpy 线性代数
- NumPy - 线性代数
- NumPy - 矩阵库
- NumPy - 矩阵加法
- NumPy - 矩阵减法
- NumPy - 矩阵乘法
- NumPy - 元素级矩阵运算
- NumPy - 点积
- NumPy - 矩阵求逆
- NumPy - 行列式计算
- NumPy - 特征值
- NumPy - 特征向量
- NumPy - 奇异值分解
- NumPy - 求解线性方程组
- NumPy - 矩阵范数
- NumPy 元素级矩阵运算
- NumPy - 求和
- NumPy - 平均值
- NumPy - 中位数
- NumPy - 最小值
- NumPy - 最大值
- NumPy 集合运算
- NumPy - 唯一元素
- NumPy - 交集
- NumPy - 并集
- NumPy - 差集
- NumPy 有用资源
- NumPy 编译器
- NumPy - 快速指南
- NumPy - 有用资源
- NumPy - 讨论
NumPy - 使用花式索引排序
NumPy 中使用花式索引排序
NumPy 中使用花式索引排序涉及使用索引数组重新排列另一个数组中的元素。花式索引允许您根据特定索引对数组进行排序或重新排序,让您更好地控制数据组织方式。
例如,您可以首先使用 argsort() 函数确定元素的顺序,然后使用这些索引对原始数组进行排序。这对于需要精确控制元素顺序的复杂数据操作任务非常有用。
基本花式索引
基本花式索引涉及使用一个或多个索引数组从 NumPy 数组中选择元素。这些索引可以是整数数组或布尔值数组,允许非连续选择元素。这对于重新排序或同时选择多个元素特别有用。
示例
在下面的示例中,我们使用花式索引根据一组指定的索引重新排序数组。通过使用 “indices” 数组索引 “arr”,我们得到一个新的数组,其中元素根据给定的顺序排列 -
import numpy as np arr = np.array([10, 20, 30, 40, 50]) indices = np.array([4, 2, 3, 1, 0]) sorted_arr = arr[indices] print("Original Array:", arr) print("Sorted Array with Fancy Indexing:", sorted_arr)
以下是获得的输出 -
Original Array: [10 20 30 40 50] Sorted Array with Fancy Indexing: [50 30 40 20 10]
使用花式索引排序数组
使用花式索引排序数组涉及首先创建一个表示所需元素顺序的索引数组。然后,这些索引用于根据特定标准重新排序数组元素。
花式索引提供了一种执行高级排序操作的方法,这些操作超越了简单的就地排序。
示例
在这个例子中,我们使用 np.argsort() 函数检索将对数组 “arr” 进行排序的索引。然后使用这些索引将 “arr” 重新排列成一个排序后的数组 -
import numpy as np arr = np.array([3, 1, 4, 1, 5, 9]) # Get indices that would sort the array sort_order = np.argsort(arr) sorted_arr = arr[sort_order] print("Original Array:", arr) print("Sorted Array:", sorted_arr)
这将产生以下结果 -
Original Array: [3 1 4 1 5 9] Sorted Array: [1 1 3 4 5 9]
多维数组的花式索引
在多维数组中,花式索引可以应用于沿特定轴重新排序或选择元素。
通过使用索引数组,您可以实现各种操作,例如排序元素、重新排列行或列以及提取特定数据点。
示例:二维数组中的花式索引
在下面的示例中,我们使用花式索引重新排序二维数组的行和列。通过指定 “row_indices” 和 “col_indices”,我们重新排列数组的行和列以生成一个新的重新排序的数组 -
import numpy as np arr = np.array([[10, 20, 30], [40, 50, 60]]) row_indices = np.array([1, 0]) col_indices = np.array([2, 1, 0]) # Reorder rows and columns reordered_arr = arr[row_indices][:, col_indices] print("Original Array:\n", arr) print("Reordered Array:\n", reordered_arr)
以下是上述代码的输出 -
Original Array: [[10 20 30] [40 50 60]] Reordered Array: [[60 50 40] [30 20 10]]
示例:三维数组中的花式索引
在三维数组中,花式索引可用于重新排序第一个轴上的切片。在这里,通过指定 “slice_indices”,我们重新排列数组的切片以生成一个具有重新排序的切片的数组 -
import numpy as np # Define a 3D NumPy array with shape (3, 2, 2) arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]]) # Define an array of indices to reorder slices along the first axis slice_indices = np.array([2, 0, 1]) # Reorder the slices using fancy indexing reordered_slices = arr[slice_indices] print("Original Array:\n", arr) print("Reordered Slices:\n", reordered_slices)
获得的输出如下所示 -
Original Array: [[[ 1 2] [ 3 4]] [[ 5 6] [ 7 8]] [[ 9 10] [11 12]]] Reordered Slices: [[[ 9 10] [11 12]] [[ 1 2] [ 3 4]] [[ 5 6] [ 7 8]]]
使用花式索引和结构化数组排序
花式索引也可以应用于结构化数组,您可以在其中根据特定字段的值进行排序。
NumPy 中的结构化数组是具有复合数据类型的数组,其中每个元素可以具有多个具有不同数据类型的字段。这些对于在单个数组中管理异构数据很有用。
示例
在下面的示例中,我们根据 “age” 字段对结构化 NumPy 数组进行排序。通过对 “age” 字段使用 np.argsort() 函数,我们获得重新排序数组的索引,从而得到一个按年龄排序的新数组 -
import numpy as np dtype = [('name', 'S10'), ('age', 'i4')] values = [('Alice', 25), ('Bob', 30), ('Charlie', 20)] arr = np.array(values, dtype=dtype) # Sort by age sorted_indices = np.argsort(arr['age']) sorted_arr = arr[sorted_indices] print("Original Structured Array:\n", arr) print("Sorted by Age:\n", sorted_arr)
我们得到如下所示的输出 -
Original Structured Array: [(b'Alice', 25) (b'Bob', 30) (b'Charlie', 20)] Sorted by Age: [(b'Charlie', 20) (b'Alice', 25) (b'Bob', 30)]