Numpy 的 sort(~)
方法返回输入数组的排序副本。请注意,原始数组保持不变。
参数
1. a
| array_like
输入数组。
2. axis
| int
| optional
对输入数组进行排序的轴。对于二维数组,允许的值如下:
值 |
意义 |
---|---|
|
展平数组并对其进行排序 |
|
按列排序 |
|
按行排序 |
默认情况下,axis=-1
表示仅在最后一个轴上进行排序。对于二维数组,这意味着默认排序行为是按行排序。
3. kind
| string
| optional
要使用的排序算法。目前,Numpy 提供以下选择:
种类 |
速度 |
最坏的情况下 |
memory |
稳定的 |
---|---|---|---|---|
quicksort |
1(快) |
O(n^2) |
0 |
no |
mergesort |
2 |
O(nlogn) |
~n/2 |
yes |
timsort |
2 |
O(nlogn) |
~n/2 |
yes |
heapsort |
3(慢) |
O(nlogn) |
0 |
no |
"stable" 的排序算法保留重复值的相对顺序。例如,假设您要按每个元组的第一个元素对数组 [(2,3), (2,1), (4,5)] 进行排序。我们这里有一个重复值 2,因此稳定的排序算法确保 (2,3) 始终位于 (2,1) 之前,因为这就是它们最初的排序方式。不稳定的搜索不能保证保留此类顺序。
默认情况下,kind="quicksort"
。
警告
数据类型决定使用归并排序还是时间排序
尽管您可以指定 mergesort 或 timsort,Numpy 最终将根据数组的数据类型做出决定。目前无法强制您在两者之间选择算法。
注意
Timsort 为排序或接近排序的数组提供最佳性能
Timsort 是 Numpy(版本 1.17)中添加的最新搜索算法。对于随机排列的数字,Timsort 仍然几乎与归并排序一样高效。
4. order
| string
或list
或strings
| optional
排序依据的字段。这仅适用于结构化数组 - 请参阅下面的示例以进行说明。
返回值
一个 Numpy 数组,它是输入数组的排序副本。
例子
对一维数组进行排序
x = np.array([1,4,2,3])
np.sort(x)
array([1, 2, 3, 4])
对二维数组进行排序
假设我们有以下二维数组:
x = np.array([[1,4],[3,2]])
x
array([[1, 4],
[3, 2]])
对展平的数组进行排序
np.sort(x, axis=None)
array([1, 2, 3, 4])
按行排序
np.sort(x) # or explicitly set axis=1
array([[1, 4],
[2, 3]])
按列排序
np.sort(x, axis=0)
array([[1, 2],
[3, 4]])
指定结构化数组的顺序
假设我们有以下结构化数组:
dtype = [('name', 'S15'), ('age', int)]
values = [('Bob', 35), ('Alex', 15),('Cathy', 24)]
x = np.array(values, dtype)
x
array([(b'Bob', 35), (b'Alex', 15), (b'Cathy', 24)],
dtype=[('name', 'S15'), ('age', '<i8')])
我们的数组 x
由三个元组组成,第一个元素为 name
,第二个元素为 age
。
按 name
排序:
np.sort(x, order="name")
array([(b'Alex', 15), (b'Bob', 35), (b'Cathy', 24)],
dtype=[('name', 'S15'), ('age', '<i8')])
请注意元组如何按名称排序: Alex
、 Bob
和 Cathy
。
按 age
排序:
np.sort(x, order="age")
array([(b'Bob', 15), (b'Cathy', 24), (b'Alex', 35)],
dtype=[('name', 'S15'), ('age', '<i8')])
请注意元组如何按年龄排序:15、24,然后是 35。
您还可以传入要排序的标签数组(例如 order=["name", "age"]
),这将首先按 name
对数组进行排序,然后按 age
进行排序。
相关用法
- Python sorted()用法及代码示例
- Python sorted方法用法及代码示例
- Python sort()用法及代码示例
- Python sorted()和sort()用法及代码示例
- Python socket.create_server用法及代码示例
- Python socket.socket.sendmsg用法及代码示例
- Python socket.socket.recvmsg_into用法及代码示例
- Python socket.socket.recvmsg用法及代码示例
- Python socket.getaddrinfo用法及代码示例
- Python sklearn.cluster.MiniBatchKMeans用法及代码示例
- Python NumPy squeeze方法用法及代码示例
- Python scipy.ndimage.binary_opening用法及代码示例
- Python scipy.signal.windows.tukey用法及代码示例
- Python scipy.stats.mood用法及代码示例
- Python str.isidentifier用法及代码示例
- Python sklearn.metrics.fbeta_score用法及代码示例
- Python scipy.fft.ihfftn用法及代码示例
- Python scipy.stats.normaltest用法及代码示例
- Python scipy.ndimage.convolve1d用法及代码示例
- Python scipy.stats.arcsine用法及代码示例
- Python scipy.interpolate.UnivariateSpline.antiderivative用法及代码示例
- Python NumPy sign方法用法及代码示例
- Python scipy.linalg.hadamard用法及代码示例
- Python sklearn.linear_model.PassiveAggressiveRegressor用法及代码示例
- Python skimage.feature.graycomatrix用法及代码示例
注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 NumPy | sort method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。