15 |
您所在的位置:网站首页 › python将数字按大小排列if › 15 |
15_Numpy使用sort和argsort函数进行(行・列)排序
如果将NumPy函数numpy.sort()应用于二维NumPy数组ndarray,则可以获得一个ndarray,其中每一行和每一列的值都按升序分别排序。 如果要按特定的行或列进行排序,请使用numpy.argsort()。 numpy.argsort()是一个返回索引ndarray而不是排序值的函数。 将描述以下内容。 如何使用numpy.sort():获取排序数组ndarray如何使用ndarray.sort():排序数组ndarray本身如何使用numpy.argsort():获取排序索引的数组ndarray如何按特定的行或列排序将与示例代码一起进行说明。 如何使用numpy.sort():获取排序数组ndarray 一维数组将原始数组ndarray指定为第一个参数。 对于一维数组,它只是按升序排序。 返回一个新的已排序的ndarray,保留原始的ndarray不变。 import numpy as np a = np.array([3, 4, 2, 0, 1]) print(a) # [3 4 2 0 1] a_sort = np.sort(a) print(a_sort) # [0 1 2 3 4] print(a) # [3 4 2 0 1]ndarray方法sort()用于更新ndarray本身。见下文。 np.sort()函数没有反向参数,这与Python标准的sort()方法和sorted()函数不同。如果要降序使用切片[::-1]。 a_sort_reverse = np.sort(a)[::-1] print(a_sort_reverse) # [4 3 2 1 0] 多维数组以二维数组为例。 a_2d = np.array([[20, 3, 100], [1, 200, 30], [300, 10, 2]]) print(a_2d) # [[ 20 3 100] # [ 1 200 30] # [300 10 2]]选择要按参数轴排序的轴。 对于二维数组,axis = 0在列上排序,而axis = 1在行上排序。每列/行中的值分别进行排序。 a_2d_sort_col = np.sort(a_2d, axis=0) print(a_2d_sort_col) # [[ 1 3 2] # [ 20 10 30] # [300 200 100]] a_2d_sort_row = np.sort(a_2d, axis=1) print(a_2d_sort_row) # [[ 3 20 100] # [ 1 30 200] # [ 2 10 300]]默认值为axis = -1,它沿最后一个轴排序。如果是二维数组,则按行排序。 a_2d_sort_row = np.sort(a_2d) print(a_2d_sort_row) # [[ 3 20 100] # [ 1 30 200] # [ 2 10 300]] a_2d_sort_row = np.sort(a_2d, axis=-1) print(a_2d_sort_row) # [[ 3 20 100] # [ 1 30 200] # [ 2 10 300]]如果要降序,请对每个轴使用切片[::-1]。末尾的;;可以省略([::-1]等效于[::-1,:])。 a_2d_sort_col_reverse = np.sort(a_2d, axis=0)[::-1] print(a_2d_sort_col_reverse) # [[300 200 100] # [ 20 10 30] # [ 1 3 2]] a_2d_sort_row_reverse = np.sort(a_2d, axis=1)[:, ::-1] print(a_2d_sort_row_reverse) # [[100 20 3] # [200 30 1] # [300 10 2]] 如何使用ndarray.sort():排序数组ndarray本身除了函数外,还提供sort()作为NumPy数组ndarray的方法。 ndarray本身已排序和更新。参数与numpy.sort()函数相同。 print(a_2d) # [[ 20 3 100] # [ 1 200 30] # [300 10 2]] a_2d.sort() print(a_2d) # [[ 3 20 100] # [ 1 30 200] # [ 2 10 300]] a_2d.sort(axis=0) print(a_2d[::-1]) # [[ 3 30 300] # [ 2 20 200] # [ 1 10 100]] 如何使用numpy.argsort():获取排序索引的数组ndarraynp.argsort()返回排序索引的ndarray(在原始ndarray中的位置,从0 = 0开始),而不是按值。参数轴等的概念与np.sort()相同。 a_2d = np.array([[20, 3, 100], [1, 200, 30], [300, 10, 2]]) print(a_2d) # [[ 20 3 100] # [ 1 200 30] # [300 10 2]] a_2d_sort_col_index = np.argsort(a_2d, axis=0) print(a_2d_sort_col_index) # [[1 0 2] # [0 2 1] # [2 1 0]] a_2d_sort_row_index = np.argsort(a_2d) print(a_2d_sort_row_index) # [[1 0 2] # [0 2 1] # [2 1 0]] 如何按特定的行或列排序使用np.argsort()按任何行或列对多维数组进行排序,而不是像np.sort()那样对每一行或列进行排序。 使用np.argsort()获取参考行或列索引并相应地重新排列行和列的流程。 按特定列排序使用np.argsort()获取参考行或列索引。 print(a_2d) # [[ 20 3 100] # [ 1 200 30] # [300 10 2]] col_num = 1 print(a_2d[:, col_num]) # [ 3 200 10] print(np.argsort(a_2d[:, col_num])) # [0 2 1]根据该索引对行进行排序。 a_2d_sort_col_num = a_2d[np.argsort(a_2d[:, col_num])] print(a_2d_sort_col_num) # [[ 20 3 100] # [300 10 2] # [ 1 200 30]]如果要使用降序,请以相反的顺序使用[::-1]以通过np.argsort()获得索引。 print(np.argsort(a_2d[:, col_num])[::-1]) # [1 2 0] a_2d_sort_col_num_reverse = a_2d[np.argsort(a_2d[:, col_num])[::-1]] print(a_2d_sort_col_num_reverse) # [[ 1 200 30] # [300 10 2] # [ 20 3 100]] 按特定行排序行与列相同。 row_num = 1 print(a_2d[row_num]) # [ 1 200 30] print(np.argsort(a_2d[row_num])) # [0 2 1] a_2d_sort_row_num = a_2d[:, np.argsort(a_2d[row_num])] print(a_2d_sort_row_num) # [[ 20 100 3] # [ 1 30 200] # [300 2 10]] print(np.argsort(a_2d[row_num])[::-1]) # [1 2 0] a_2d_sort_row_num_inverse = a_2d[:, np.argsort(a_2d[row_num])[::-1]] print(a_2d_sort_row_num_inverse) # [[ 3 100 20] # [200 30 1] # [ 10 2 300]] |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |