原文:https://docs.scipy.org/doc/numpy/reference/generated/numpy.sort.html
校对:(虚位以待)
numpy.
sort
(a, axis=-1, kind='quicksort', order=None)[source]返回数组的排序副本。
参数: | a:array_like
axis:int或None,可选
kind:{'quicksort','mergesort','heapsort'},可选
order:str或str的列表,可选
|
---|---|
返回: | sorted_array:ndarray
|
也可以看看
ndarray.sort
argsort
lexsort
searchsorted
partition
笔记
各种排序算法的特征在于它们的平均速度,最坏情况性能,工作空间大小,以及它们是否稳定。稳定排序使用具有相同相对顺序的相同键的项目。这三种可用的算法具有以下属性:
类 | 速度 | 最坏的情况下 | 工作空间 | 稳定 |
---|---|---|---|---|
'quicksort' | 1 | O(n ^ 2) | 0 | 没有 |
'mergesort' | 2 | O(n * log(n)) | 〜n / 2 | 是 |
'heapsort' | 3 | O(n * log(n)) | 0 | 没有 |
所有排序算法在沿着除最后一个轴之外的任何排序时创建数据的临时副本。因此,沿着最后一个轴的排序更快,并且比沿着任何其它轴的排序使用更少的空间。
复数的排序顺序是字典。如果实部和虚部都是非纳米,则阶数由实部确定,除非它们相等,在这种情况下,阶数由虚部确定。
在numpy 1.4.0之前排序包含nan值的真实和复杂数组导致未定义的行为。在numpy版本> = 1.4.0 nan值排序到结束。扩展的排序顺序为:
- 实:[R,nan]
- 复数:[R + Rj,R + nanj,nan + Rj,nan + nanj]
其中R是非纳米实数值。具有相同纳米位置的复数值根据非纳米部分(如果存在)进行排序。非nan值按照前面的顺序排序。
例子
>>> a = np.array([[1,4],[3,1]])
>>> np.sort(a) # sort along the last axis
array([[1, 4],
[1, 3]])
>>> np.sort(a, axis=None) # sort the flattened array
array([1, 1, 3, 4])
>>> np.sort(a, axis=0) # sort along the first axis
array([[1, 1],
[3, 4]])
使用order关键字指定在对结构化数组进行排序时要使用的字段:
>>> dtype = [('name', 'S10'), ('height', float), ('age', int)]
>>> values = [('Arthur', 1.8, 41), ('Lancelot', 1.9, 38),
... ('Galahad', 1.7, 38)]
>>> a = np.array(values, dtype=dtype) # create a structured array
>>> np.sort(a, order='height')
array([('Galahad', 1.7, 38), ('Arthur', 1.8, 41),
('Lancelot', 1.8999999999999999, 38)],
dtype=[('name', '|S10'), ('height', '<f8'), ('age', '<i4')])
按年龄排序,然后按年龄相等的高度排序:
>>> np.sort(a, order=['age', 'height'])
array([('Galahad', 1.7, 38), ('Lancelot', 1.8999999999999999, 38),
('Arthur', 1.8, 41)],
dtype=[('name', '|S10'), ('height', '<f8'), ('age', '<i4')])