NumPy - 沿轴排序
在 NumPy 中沿轴排序
在 NumPy 中,数组可以是多维的,并且可以沿任意维度(轴)进行排序。沿轴排序意味着根据该轴上的值按特定顺序排列数组元素。
在 NumPy 中,不同的轴包括:第 0 个轴(行)、第 1 个轴(列)和更高轴(深度或其他维度)。
np.sort() 函数
np.sort() 函数对数组元素进行排序,并返回一个包含排序后元素的新数组。排序可以沿指定的轴进行,如果未指定轴,则该函数默认沿最后一个轴排序。语法如下:
numpy.sort(a, axis=-1, kind=None, order=None)
其中:
- a: 待排序的数组。
- axis: 排序时所沿的轴。默认值为 -1,表示沿最后一个轴排序。
- kind: 使用的排序算法。选项包括"quicksort"、"mergesort"、"heapsort"和"stable"。
- order: 用于对结构化数组进行排序,以定义要比较的字段。
沿轴 0(行)排序
在 NumPy 中,沿轴 0 排序是指沿垂直轴对数组元素进行排序,该轴对应于二维数组中的行。
当您想要根据每列中的值对矩阵的行进行排序时,此操作非常有用。
在二维数组中 -
- 轴 0 对应于行。
- 轴 1 对应于列。
沿轴 0 排序时, NumPy 按列对元素进行排序。对于每一列,值按升序排列,行也相应地重新排序。
示例
在下面的示例中,我们使用 sort() 函数对每一列中的元素进行排序 -
import numpy as np # 创建二维数组 arr = np.array([[3, 6, 4], [5, 1, 2]]) # 沿轴 0(行)排序 sorted_arr_axis0 = np.sort(arr, axis=0) print("原始数组: ", arr) print("沿轴 0 排序: ", sorted_arr_axis0)
输出将对行进行重新排序,使每一列中的值按升序排列−
原始数组: [[3 6 4] [5 1 2]] 沿轴 0 排序: [[3 1 2] [5 6 4]]
沿轴 1(列)排序
在 NumPy 中,沿轴 1 排序是指沿水平轴对数组元素进行排序,该水平轴对应于二维数组中的列。当你想根据元素的值对每行元素进行排序时,此操作非常有用。
沿轴 1 排序时,NumPy 按行对元素进行排序。对于每一行,值按升序排列,列的顺序也相应调整。
示例
在此示例中,我们使用 sort() 函数对每行元素进行排序 −
import numpy as np # 创建二维数组 arr = np.array([[3, 2, 1], [6, 5, 4]]) # 沿轴 1(列)排序 sorted_arr_axis1 = np.sort(arr, axis=1) print("原始数组: ", arr) print("沿轴 1 排序后: ", sorted_arr_axis1)
输出结果将对每一行中的列进行重新排序,使值按升序排列 -
原始数组: [[3 2 1] [6 5 4]] 沿轴 1 排序后: [[1 2 3] [4 5 6]]
多维数组排序
排序NumPy 中的多维数组涉及沿一个或多个特定轴组织数组元素。
在多维数组中沿特定轴排序类似于在二维数组中排序,但扩展到更高维度。以下是沿不同轴排序的工作原理 -
- 轴 0(第一维):沿轴 0 排序会影响行。
- 轴 1(第二维):沿轴 1 排序会影响列。
- 轴 2(第三维):在三维数组中,沿轴 2 排序会影响深度切片。
示例
在下面的示例中,我们沿不同的轴对三维数组进行排序:深度(轴 0)、行(轴 1)和列(轴 2)。每次排序操作都会按指定维度排列元素,从而生成不同顺序的数组 -
import numpy as np # 创建三维数组 arr = np.array([[[3, 2, 1], [6, 5, 4]], [[9, 8, 7], [12, 11, 10]]]) # 沿轴 0(深度)排序 sorted_arr_axis0 = np.sort(arr, axis=0) # 沿轴 1(行)排序 sorted_arr_axis1 = np.sort(arr, axis=1) # 沿轴 2(列)排序 sorted_arr_axis2 = np.sort(arr, axis=2) print("原始数组: ", arr) print("沿轴 0 排序: ", sorted_arr_axis0) print("沿轴 1 排序: ", sorted_arr_axis1) print("沿轴 2 排序: ", sorted_arr_axis2)
以下是上述代码的输出 -
原始数组: [[[ 3 2 1] [ 6 5 4]] [[ 9 8 7] [12 11 10]]] 沿轴 0 排序: [[[ 3 2 1] [ 6 5 4]] [[ 9 8 7] [12 11 10]]] 沿轴 1 排序: [[[ 3 2 1] [ 6 5 4]] [[ 9 8 7] [12 11 10]]] 沿轴 2 排序: [[[ 1 2 3] [ 4 5 6]] [[ 7 8 9] [10 11 12]]]
使用不同算法排序
NumPy sort() 函数支持多种排序算法,每种算法都有其优势 -
- 快速排序
- 归并排序
- 堆排序
- 稳定排序
可以通过设置 np.sort() 函数中的 kind 参数来选择这些算法。默认情况下,NumPy 使用"快速排序"算法。
排序算法是按特定顺序排列元素的方法。不同的算法具有不同的性能特征,并针对不同类型的数据和数组大小进行了优化。
示例
在此示例中,数组沿轴"1"使用"快速排序"和"合并排序"算法进行排序。不同的排序算法会影响性能和稳定性 -
import numpy as np # 创建二维数组 arr = np.array([[3, 2, 1], [6, 5, 4]]) # 使用不同算法排序 sorted_quicksort = np.sort(arr, axis=1, kind='quicksort') sorted_mergesort = np.sort(arr, axis=1, kind='mergesort') print("使用快速排序排序: ", sorted_quicksort) print("使用合并排序排序: ", sorted_mergesort)
输出结果如下 -
使用快速排序排序: [[1 2 3] [4 5 6]] 已归并排序: [[1 2 3] [4 5 6]]