MATLAB和Python提供了函数对数组的元素进行水平方向排序或垂直方向排序。也可以将二维数组的行数据按照指定列的数据大小进行排序。[大谦MATLAB,dqmatlab点com]
对数组元素进行排序
对数组元素排序,指对数组的行数据或列数据单独进行排序。
【MATLAB】
MATLAB中使用sort函数对数组元素进行排序。对于一维数组的情况,下面创建一个一维数组:
>> A=[12 62 93 -8 22]
A =
12 62 93 -8 22
用sort函数进行升序排列。
>> sort(A)
ans =
-8 12 22 62 93
用sort函数进行降序排列。
>> sort(A,'descend')
ans =
93 62 22 12 -8
【Python】
Python中使用NumPy包的sort函数进行排序。
创建一个一维数组。
>>> a=np.array([12,62,93,-8,22])
>>> a
array([12, 62, 93, -8, 22])
对数组元素按升序排列。
>>> np.sort(a)
array([-8, 12, 22, 62, 93])
对数组元素按降序排列。
>>> np.sort(a)[::-1]
array([93, 62, 22, 12,-8])
对于二维的情况,二维数组中的元素有按行排列和按列排列两种情况。
【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,对数组的行数据升序排列。
>> sort(A,2)
ans =
-8 12 22 63 93
2 16 43 87 91
-72 -4 6 17 95
【Python】
Python中用NumPy包的sort函数对数组行数据进行升序排列。
>>> 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,对数组的列数据升序排列。
>> 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
对列数据进行降序排列。
>> 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,对二维数组的列数据进行升序排列。
>>> 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]])
对列数据进行降序排列。
>>> 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。
>> A=[12 62 93 -8 22;16 2 87 43 91;-4 17 -72 95 6]
使用sortrows函数对行进行排序。默认时,根据第1列的数据大小进行行排序。
>> sortrows(A)
ans =
-4 17 -72 95 6
12 62 93 -8 22
16 2 87 43 91
可见,数组A的各行数据根据第1列数据的大小进行了排序。与上一小节不同的是,这里行数据是作为一个整体进行操作的。
将行根据第1列数据的大小作降序排列。
>> sortrows(A,'descend')
ans =
16 2 87 43 91
12 62 93 -8 22
-4 17 -72 95 6
下面将行根据第2列数据的大小作升序排列。
>> sortrows(A,2)
ans =
16 2 87 43 91
-4 17 -72 95 6
12 62 93 -8 22
【Python】
在给数组设置了列名的情况下,Python中使用NumPy包的sort函数可以进行行排序。
下面定义各列数据的名称和数据类型,创建二维数组。
>>> 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列数据的大小对各行作升序排列。
>>> 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列数据的大小对各行作降序排列。
>>> 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列数据的大小对各行作升序排列。
>>> 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')])