python数据分析numpy基础之sort对数组排序

1 python数据分析numpy基础之sort对数组排序

numpy数组和python的内置列表类似,也可以进行排序,numpy.sort()返回排序后的数组副本,而ndarray.sort()对数组进行就地排序,会改变原数组。

用法

numpy.sort(a, axis=-1, kind=None, order=None)

描述

numpy.sort()返回沿指定轴排序后的数组副本,可以通过order指定排序字段。

入参

a:必选,需要排序的数组或元组或列表。

axis:可选,整数,指定要排序的轴,默认为-1,沿最后一个轴排序。如果为None,则转为一维数组进行排序。

order:可选,字符串或字符串数组,表示排序字段。

1.1 入参a

numpy.sort()的入参a,为必选入参,表示需排序的数据,可以为数组、列表、元组。

>>> import numpy as np
# 对列表排序
>>> np.sort([5,-2,3,6,8])
array([-2,  3,  5,  6,  8])
# 对元组排序
>>> np.sort((5,-2,3,6,8))
array([-2,  3,  5,  6,  8])
# 对数组排序
>>> np.sort(np.array((5,-2,3,6,8)))
array([-2,  3,  5,  6,  8])

1.2 入参axis

numpy.sort()的入参axis为可选入参,只能为整数(不支持元组),范围[0, ndim),默认为-1,沿最后一个轴进行升序排序。axis=None,则多维数组则转换为一维数组后升序排序。

若axis=n为整数,则沿指定轴n排序。

若axis=负数,则-1对应最后一个轴,-2倒数第2个轴,依此类推。

>>> import numpy as np
>>> ar3=np.random.randint(0,10,24).reshape(2,3,4)
>>> ar3
array([[[1, 8, 5, 0],
        [2, 3, 4, 4],
        [5, 9, 8, 2]],

       [[6, 6, 1, 9],
        [6, 1, 9, 2],
        [4, 6, 9, 2]]])
# axis为None,转为一维数组后升序排序
>>> np.sort(ar3,axis=None)
array([0, 1, 1, 1, 2, 2, 2, 2, 3, 4, 4, 4, 5, 5, 6, 6, 6, 6, 8, 8, 9, 9,
       9, 9])
# axis沿0轴升序排序
>>> np.sort(ar3,axis=0)
array([[[1, 6, 1, 0],
        [2, 1, 4, 2],
        [4, 6, 8, 2]],

       [[6, 8, 5, 9],
        [6, 3, 9, 4],
        [5, 9, 9, 2]]])
# axis沿1轴升序排序
>>> np.sort(ar3,axis=1)
array([[[1, 3, 4, 0],
        [2, 8, 5, 2],
        [5, 9, 8, 4]],

       [[4, 1, 1, 2],
        [6, 6, 9, 2],
        [6, 6, 9, 9]]])
# axis沿2轴升序排序
>>> np.sort(ar3,axis=2)
array([[[0, 1, 5, 8],
        [2, 3, 4, 4],
        [2, 5, 8, 9]],

       [[1, 6, 6, 9],
        [1, 2, 6, 9],
        [2, 4, 6, 9]]])
# 若axis=负数,则-1对应最后一个轴,-2倒数第2个轴,依此类推。
>>> np.sort(ar3,axis=-1)
array([[[0, 1, 5, 8],
        [2, 3, 4, 4],
        [2, 5, 8, 9]],

       [[1, 6, 6, 9],
        [1, 2, 6, 9],
        [2, 4, 6, 9]]])
# axis默认为-1       
>>> np.sort(ar3)
array([[[0, 1, 5, 8],
        [2, 3, 4, 4],
        [2, 5, 8, 9]],

       [[1, 6, 6, 9],
        [1, 2, 6, 9],
        [2, 4, 6, 9]]])

1.3 入参order

numpy.sort()的入参order为可选入参,为字符串或字符串列表,表示排序字段。字符串列表时表示按多个字段排序。若未给出order,则按dtype的顺序排序。

>>> import numpy as np
>>> vals=[('zs',50.5,21),('ls',51.2,19),('ww',50.1,19),('td',60.9,36)]
>>> dtype=[('name','S5'),('income',float),('age',int)]
>>> ar=np.array(vals,dtype=dtype)
>>> ar
array([(b'zs', 50.5, 21), (b'ls', 51.2, 19), (b'ww', 50.1, 19),
       (b'td', 60.9, 36)],
      dtype=[('name', 'S5'), ('income', '<f8'), ('age', '<i4')])
# order指定按age升序排序
>>> np.sort(ar,order='age')
array([(b'ls', 51.2, 19), (b'ww', 50.1, 19), (b'zs', 50.5, 21),
       (b'td', 60.9, 36)],
      dtype=[('name', 'S5'), ('income', '<f8'), ('age', '<i4')])
# order指定按age和income升序排序
>>> np.sort(ar,order=('age','income'))
array([(b'ww', 50.1, 19), (b'ls', 51.2, 19), (b'zs', 50.5, 21),
       (b'td', 60.9, 36)],
      dtype=[('name', 'S5'), ('income', '<f8'), ('age', '<i4')])
# order未给,默认按dtype的顺序升序排序
>>> np.sort(ar)
array([(b'ls', 51.2, 19), (b'td', 60.9, 36), (b'ww', 50.1, 19),
       (b'zs', 50.5, 21)],
      dtype=[('name', 'S5'), ('income', '<f8'), ('age', '<i4')])
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值