python中numpy数组排序_NumPy排序的实现

numpy.sort()函数

该函数提供了多种排序功能,支持归并排序,堆排序,快速排序等多种排序算法

使用numpy.sort()方法的格式为:

numpy.sort(a,axis,kind,order)

a:要排序的数组

axis:沿着排序的轴,axis=0按照列排序,axis=1按照行排序。

kind:排序所用的算法,默认使用快速排序。常用的排序方法还有

quicksort:快速排序,速度最快,算法不具有稳定性

mergesort:归并排序,优点是具有稳定性,空间复杂度较高,一般外部排序时才会考虑

heapsort:堆排序,优点是堆排序在最坏的情况下,其时间复杂度也为O(nlogn),是一个既最高效率又最节省空间的排序方法

order:如果包含字段,则表示要排序的字段(比如按照数组中的某个元素项进行排序)

下面通过一个实例来具体了解numpy.sort()函数的用法

假设我们有一组用户信息,包含用户的用户名以及用户的年龄,我们按照用户的年龄来进行排序

?

运行结果:

[(b'adm', 19) (b'ade', 23) (b'wan', 23)]

Process finished with exit code 0

numpy.argsort()函数

numpy.argsort()函数返回的时从小到大的元素的索引

可以通过以下的实例更好的理解

使用argsort()方法返回索引并重构数组

?

运行结果:

返回从小到大的索引

[3 0 4 1 2]

以索引对原数组排序

[ 2  3  5  8 11]

重构原数组

2,3,5,8,11,

Process finished with exit code 0

numpy.lexsort()函数

numpy.sort()函数可对于多个序列进行排序,例如我们在比较成绩的时候先比较总成绩,由后列到前列的优先顺序进行比较,这时就用到了lexsort()方法

?

运行结果:

使用这个索引来获取排序后的数据:

['amar, f.y.', 'anil, s.y.', 'raju, f.y.', 'ravi, s.y.']

Process finished with exit code 0

numpy.partition()函数

numpy.partition()叫做分区排序,可以制定一个数来对数组进行分区。

格式如下:

?

实例:实现将数组中比7小的元素放到前面,比7大的放后面

?

运行结果:

[ 0  1  2  3  7  9 13 23]

Process finished with exit code 0

实例:实现将数组中比7小的元素放到前面,比10大的放后面,7-10之间的元素放中间

partition分区排序

?

运行结果

[ 1  0  2  3  5  6  7  9 10 12 13 23 27]

[ 0  1  2  6  5  3  7  9 10 12 23 13 27]

Process finished with exit code 0

注意:(7,10)中10的位置,数值不能超过数组长度。

numpy.nonzero()函数

返回输入数组中非零元素的索引

?

运行结果:

我们的数组是:

[[30 40  0]

[ 0 20 10]

[50  0 60]]

调用 nonzero() 函数:

(array([0, 0, 1, 1, 2, 2]), array([0, 1, 1, 2, 0, 2]))

Process finished with exit code 0

numpy.where()函数

返回满足输入条件的索引

?

运行结果:

(array([6, 7, 8], dtype=int64),)

利用索引得到数组中的元素

[23 13 27]

Process finished with exit code 0

numpy.extract()函数

numpy.extract()函数实现的是返回自定义条件的元素

?

运行结果:

[9 2 6]

Process finished with exit code 0

其它排序函数

numpy.argmax() 和 numpy.argmin()函数分别沿给定轴返回最大和最小元素的索引。numpy.sort_complex(a)函数实现对复数按照先实部后虚部的顺序进行排序。numpy.argpartition(a, kth[, axis, kind, order])函数实现通过指定关键字沿着指定的轴对数组进行分区。

下面举一个复数排序的例子:

?

运行结果:

[1.+2.j 2.-1.j 3.-3.j 3.-2.j 3.+5.j]

Process finished with exit code 0

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://www.cnblogs.com/supershuai/p/12221362.html

NumPy 提供了 `numpy.sort` 函数用于对数组进行排序。该函数可以沿指定轴对标量数据进行升序排列,默认情况下会返回一个新的已排序数组,而不会修改原始数组。 以下是关于 NumPy 数组排序的一些关键点: 1. **默认功能** - 使用 `np.sort(arr)` 可以按行或列对数组元素进行排序。 - 默认按照最后一维(即最后一个轴)排序,并生成新的数组。 2. **控制排序方向和维度** - 参数 `axis` 决定在哪一维度上应用排序算法。例如: - 如果设置 `axis=0` ,则沿着每一列表格内进行垂直排序; - 而当设成 `axis=1` 时,则水平地逐行列出并处理其内容项之间的相对顺序位置变化情况。 - 若要获取降序结果,可在之后通过反转操作达成目标如:`arr[::-1]` 3. **稳定性和性能考虑** - 支持多种内部使用的高效排序机制包括但不限于冒泡法、快速选择等;用户也可以自定义比较规则满足特定需求下的个性化定制化服务要求等等哦~ 示例代码片段展示如何运用此功能完成基本任务演示效果如下所示: ```python import numpy as np # 创建测试矩阵 array = np.array([[4, 1], [7, 6]]) print("原数组:") print(array) sorted_array_axis_0 = np.sort(array, axis=0) # 沿着第一维(纵轴)排序 print("\n沿着第一维排序后的数组:") print(sorted_array_axis_0) sorted_array_axis_none = np.sort(array, axis=None) # 展平后再整体排序 print("\n展平后排序的结果:") print(sorted_array_axis_none) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值