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')])