数组的排序

MATLAB和Python提供了函数对数组的元素进行水平方向排序或垂直方向排序。也可以将二维数组的行数据按照指定列的数据大小进行排序。[大谦MATLAB,dqmatlab点com]

对数组元素进行排序

对数组元素排序,指对数组的行数据或列数据单独进行排序。

【MATLAB】

MATLAB中使用sort函数对数组元素进行排序。对于一维数组的情况,下面创建一个一维数组:

code.matlab
>> A=[12 62 93 -8 22]
A =
    12	62	93	-8	22

用sort函数进行升序排列。

code.matlab
>> sort(A)
ans =
    -8	12	22	62	93

用sort函数进行降序排列。

code.matlab
>> sort(A,'descend')
ans =
    93	62	22	12	-8

【Python】

Python中使用NumPy包的sort函数进行排序。

创建一个一维数组。

code.python
>>> a=np.array([12,62,93,-8,22])
>>> a
array([12, 62, 93, -8, 22])

对数组元素按升序排列。

code.python
>>> np.sort(a)
array([-8, 12, 22, 62, 93])

对数组元素按降序排列。

code.python
>>> np.sort(a)[::-1]
array([93, 62, 22, 12,-8])

对于二维的情况,二维数组中的元素有按行排列和按列排列两种情况。

【MATLAB】

下面创建一个二维数组。

code.matlab
>> A=[12 62 93 -8 22;16 2 87 43 91;-4 17 -72 95 6]
A =
12	62	93	-8	22
16	2	87	43	91
-4	17	-72	95	6

指定sort函数的第2个参数的值为2,对数组的行数据升序排列。

code.matlab
>> sort(A,2)
ans =
    -8	12	22	63	93
     2	16	43	87	91
   -72	-4	6	17	95

【Python】

Python中用NumPy包的sort函数对数组行数据进行升序排列。

code.python
>>> a=np.array([[12,62,93,-8,22],[16,2,87,43,91],[-4,17,-72,95,6]])
>>> np.sort(a)
array([[ -8,  12,  22,  62,  93],
       [  2,  16,  43,  87,  91],
       [-72,  -4,   6,  17,  95]])

【MATLAB】

指定sort函数的第2个参数的值为1,对数组的列数据升序排列。

code.matlab
>> A=[12 62 93 -8 22;16 2 87 43 91;-4 17 -72 95 6]
>> sort(A,1)
ans =
-4	2	-72	-8	6
12	17	87	43	22
16	62	93	95	91

对列数据进行降序排列。

code.matlab
>> sort(A,1,'descend')
ans =
16	62	93	95	91
12	17	87	43	22
-4	2	-72	-8	6

【Python】

Python中,指定sort函数的axis参数的值为0,对二维数组的列数据进行升序排列。

code.python
>>> a=np.array([[12,62,93,-8,22],[16,2,87,43,91],[-4,17,-72,95,6]])
>>> np.sort(a,axis=0)
array([[ -4,   2, -72,  -8,   6],
       [ 12,  17,  87,  43,  22],
       [ 16,  62,  93,  95,  91]])

对列数据进行降序排列。

code.python
>>> np.sort(a,axis=0)[::-1]
array([[ 16,  62,  93,  95,  91],
       [ 12,  17,  87,  43,  22],
       [ -4,   2, -72,  -8,   6]])

对数组的行进行排序

上一小节实现了对给定数组中行或列数据的排序,实际工作中,常常要求数组的行根据某列数据的大小进行排序,本小节讨论这种排序。

【MATLAB】

MATLAB中使用sortrows函数实现行的排序。下面创建一个二维数组A。

code.matlab
>> A=[12 62 93 -8 22;16 2 87 43 91;-4 17 -72 95 6]

使用sortrows函数对行进行排序。默认时,根据第1列的数据大小进行行排序。

code.matlab
>> sortrows(A)
ans =
-4	17	-72	95	6
12	62	93	-8	22
16	2	87	43	91

可见,数组A的各行数据根据第1列数据的大小进行了排序。与上一小节不同的是,这里行数据是作为一个整体进行操作的。

将行根据第1列数据的大小作降序排列。

code.matlab
>> sortrows(A,'descend')
ans =
16	2	87	43	91
12	62	93	-8	22
-4	17	-72	95	6

下面将行根据第2列数据的大小作升序排列。

code.matlab
>> sortrows(A,2)
ans =
16	2	87	43	91
-4	17	-72	95	6
12	62	93	-8	22

【Python】

在给数组设置了列名的情况下,Python中使用NumPy包的sort函数可以进行行排序。

下面定义各列数据的名称和数据类型,创建二维数组。

code.python
>>> dtype=[('col1',int), ('col2',int), ('col3',int), ('col4',int), ('col5',int)]
>>> a=np.array([(12,62,93,-8,22),(16,2,87,43,91),(-4,17,-72,95,6)], dtype=dtype)

用sort函数根据第1列数据的大小对各行作升序排列。

code.python
>>> b=np.sort(a,order='col1')
>>> b
array([(-4, 17, -72, 95,  6), (12, 62,  93, -8, 22),
       (16,  2,  87, 43, 91)],
      dtype=[('col1', '<i4'), ('col2', '<i4'), ('col3', '<i4'), ('col4', '<i4'), ('col5', '<i4')])

根据第1列数据的大小对各行作降序排列。

code.python
>>> b=np.sort(a,order='col1')[::-1]
>>> b
array([(16,  2,  87, 43, 91), (12, 62,  93, -8, 22),
       (-4, 17, -72, 95,  6)],
      dtype=[('col1', '<i4'), ('col2', '<i4'), ('col3', '<i4'), ('col4', '<i4'), ('col5', '<i4')])

根据第2列数据的大小对各行作升序排列。

code.python
>>> b=np.sort(a,order='col2')
>>> b
array([(16,  2,  87, 43, 91), (-4, 17, -72, 95,  6),
       (12, 62,  93, -8, 22)],
      dtype=[('col1', '<i4'), ('col2', '<i4'), ('col3', '<i4'), ('col4', '<i4'), ('col5', '<i4')])