6.Numpy数组的排序

Numpy数组的排序

到现在,我们已经讲解了Numpy中数组的创建,数组的操作,数组的计算:通用函数,数组的聚合与广播,Numpy数组中数据的抽取.

本章中,我们将讲解Numpy中数组的排序,Numpy为数组的排序提供了一系列方法和函数.

而且由于其向量操作,效率和速度通常我们自己写出的更高


1.概述

原生的Python中提供了sort()和sorted()函数可以对列表进行排序.但是相比于Numpy中的排序函数,效率要更低.

因此下面将讲解Numpy中的快速排序函数:np.sort和np.argsort


2.numpy.sort函数

numpy.sort方法是在不修改输入数组的基础上,返回一个排序好的数组

返回值=np.sort(数组)

例如:

array_1=np.random.randint(0,10,(10))
print(array_1)
array_2=np.sort(array_1)
print(array_2)
>>>
[3 0 9 8 1 9 5 2 9 5]
[0 1 2 3 5 5 8 9 9 9]

当数组为二维数组时候,默认对行排列

array_1=np.random.randint(0,10,(3,4))
print(array_1)
array_2=np.sort(array_1)
print(array_2)
>>>
[[7 8 9 3]
 [3 7 8 1]
 [2 8 0 9]]
[[3 7 8 9]
 [1 3 7 8]
 [0 2 8 9]]

我们可以指定axis来指定排列的方向


2.sort方法

如果我们相对数组进行永久性的排序,可以使用numpy.ndarray对象的sort方法

数组名.sort()

同样,在没有指定轴的时候,默认沿行排列

例如:

array_1=np.random.randint(0,10,(3,4))
print(array_1)
array_1.sort()
print(array_1)
>>>
[[3 6 6 4]
 [1 9 2 7]
 [8 6 8 0]]
[[3 4 6 6]
 [1 2 7 9]
 [0 6 8 8]]

3.numpy.argsort函数

numpy.argsort函数用于返回原始数组排序好的索引值

返回值=np.argsort(数组)

例如:

array_1=np.random.randint(0,10,10)
print(array_1)
array_2=np.argsort(array_1)
print(array_2)
>>>
[8 0 6 9 2 7 2 0 7 6]
[1 7 4 6 2 9 5 8 0 3]

可以发现,array_2中第一个元素是原数组中最小的元素的索引,依次向后排列

同样,如果是多维数组的话,依旧在没有指定轴的时候,按行排列

array_1=np.random.randint(0,10,(3,4))
print(array_1)
array_2=np.argsort(array_1)
print(array_2)
>>>
[[2 3 9 3]
 [7 7 5 8]
 [0 7 6 8]]
[[0 1 3 2]
 [2 0 1 3]
 [0 2 1 3]]

4.numpy.partition函数

有的时候,我们希望找出一个数组前n个最小的值,这个时候我们就可以使用numpy.partition函数

返回值=np.partition(数组名,数字n)

其中:

  • numpy.partition将会返回一个新的数组,新的数组左边是我们需要的前n小的值,右边是原数组剩下的值
  • 数字n是我们希望的前n小的值

例如:

array_1=np.random.randint(0,10,10)
array_2=np.partition(array_1,3)
print(array_1)
print(array_2)
>>>
[9 2 8 6 4 1 1 7 3 7]
[1 1 2 3 4 6 7 7 8 9]

可以看到,新数组的左边前三个值是原数组中前三小的值.

同样,对于多维数组没有指定方向的时候,将默认沿行排列

array_1=np.random.randint(0,10,(3,4))
array_2=np.partition(array_1,3)
print(array_1)
print(array_2)
>>>
[[2 7 8 0]
 [6 4 8 9]
 [4 3 2 6]]
[[0 2 7 8]
 [4 6 8 9]
 [2 3 4 6]]

需要注意:上面四个排序函数或者方法,指定沿行或者列进行排序,都是将行或者列看成新的数组进行排序

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值