当前位置:   article > 正文

15_Numpy使用sort和argsort函数进行(行・列)排序_numpy 根据列排序

numpy 根据列排序

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]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
'
运行

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]
  • 1
  • 2
  • 3

多维数组

以二维数组为例。

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]]
  • 1
  • 2
  • 3
  • 4
  • 5

选择要按参数轴排序的轴。

对于二维数组,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]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

默认值为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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

如果要降序,请对每个轴使用切片[::-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]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

如何使用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]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

如何使用numpy.argsort():获取排序索引的数组ndarray

np.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]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

如何按特定的行或列排序

使用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]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

根据该索引对行进行排序。

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
  • 2
  • 3
  • 4
  • 5

如果要使用降序,请以相反的顺序使用[::-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]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

按特定行排序

行与列相同。

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]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/906303
推荐阅读
相关标签
  

闽ICP备14008679号