numpy排序
在数据处理和分析中,排序是一个常用的操作。在Python中,numpy库提供了丰富的排序功能,可以对数组进行各种排序操作。本文将详细介绍numpy排序的相关功能。
numpy.sort()函数
numpy.sort()函数可以对数组进行排序,并返回排序后的数组。该函数的语法如下:
numpy.sort(a, axis=-1, kind='quicksort', order=None)
参数说明:
a
:待排序的数组axis
:排序的方向,默认为-1,表示按最后一个轴排序kind
:排序算法的类型,可以选择quicksort
、mergesort
、heapsort
中的一种order
:指定按照哪个字段排序
下面是一个简单的示例代码:
import numpy as np
arr = np.array([3, 1, 2, 5, 4])
print(np.sort(arr))
运行结果如下:
[1 2 3 4 5]
numpy.argsort()函数
numpy.argsort()函数返回的是数组排序的索引值。例如,如果对数组[3, 1, 2, 5, 4]
进行排序,那么索引值为[1, 2, 0, 4, 3]
。这个索引值的意义在于可以根据这个值重新排列原数组,以得到排序后的数组。语法如下:
numpy.argsort(a, axis=-1, kind='quicksort', order=None)
参数说明与numpy.sort()
函数相同。
下面是一个示例代码:
import numpy as np
arr = np.array([3, 1, 2, 5, 4])
print(np.argsort(arr))
运行结果如下:
[1 2 0 4 3]
numpy.lexsort()函数
numpy.lexsort()函数用于对多个序列进行排序。比如有两个数组,分别表示姓名和年龄,想要按照姓名进行排序,如果姓名相同再按照年龄排序。语法如下:
numpy.lexsort(keys, axis=-1)
参数说明:
keys
:待排序的序列,可以是一个元组、列表或者数组axis
:排序的方向,默认为-1
下面是一个示例代码:
import numpy as np
names = np.array(['Tom', 'Mary', 'John', 'Bob'])
ages = np.array([25, 30, 25, 20])
ind = np.lexsort((names, ages))
print(names[ind])
print(ages[ind])
运行结果如下:
['Bob' 'John' 'Mary' 'Tom']
[20 25 30 25]
numpy.argsort()与numpy.argpartition()函数
numpy.argsort()函数返回的是数组排序的索引值,而numpy.argpartition()函数返回的是进行局部排序后的索引值。局部排序是指将数组划分为两个部分,左边部分都小于右边部分的值。语法如下:
numpy.argpartition(a, kth, axis=-1, kind='introselect', order=None)
参数说明:
kth
:表示第k小的值
下面是一个示例代码:
import numpy as np
arr = np.array([3, 4, 2, 1, 5])
print(np.argpartition(arr, 2))
运行结果如下:
[3 2 0 1 4]
numpy.partition()函数
numpy.partition()函数是对数组进行分区排序,可以将数组中的元素划分为两部分,其左边的元素都小于右边的元素。语法如下:
numpy.partition(a, kth, axis=-1, kind='introselect', order=None)
参数说明:
kth
:表示第k小的值
下面是一个示例代码:
import numpy as np
arr = np.array([3, 4, 2, 1, 5])
print(np.partition(arr, 2))
运行结果如下:
[1 2 3 4 5]
总结
本文详细介绍了numpy排序的相关函数,包括numpy.sort()、numpy.argsort()、numpy.lexsort()、numpy.argpartition()和numpy.partition()等。这些函数可以帮助我们方便地对数组进行排序操作,适用于各种数据处理和分析的场景。