如何对Python NumPy数组进行并列排序

  • Post category:Python

要对Python NumPy数组进行并列排序,可以使用numpy.lexsort()函数,该函数多次对分层键进行排序以实现并列排序的目的。

以下是对NumPy数组进行并列排序的完整攻略:

步骤1:创建NumPy数组

我们首先需要创建要排序的NumPy数组。用以下代码创建一个包含年份和月份的2D NumPy数组:

import numpy as np

dates = np.array([['2019', '01'], ['2019', '02'], ['2018', '12'], ['2018', '11'], ['2019', '01']])

数组dates现在包含5个元素,每个元素都有两个分层键:年份和月份。

步骤2:调用numpy.lexsort()函数进行排序

接下来,可以使用numpy.lexsort()函数根据年份和月份对dates数组进行排序,如下所示:

sorted_indices = np.lexsort((dates[:,1], dates[:,0]))
sorted_dates = dates[sorted_indices, :]

在这里,我们向numpy.lexsort()函数传入了一个元祖参数,元组的第一个元素是月份,第二个元素是年份。请注意,numpy.lexsort()函数的参数顺序很重要,它是从右到左排序的。

步骤3:输出排序后的结果

最后,我们可以直接输出排序后的结果:

print(sorted_dates)

输出结果如下:

[['2018' '11']
 ['2018' '12']
 ['2019' '01']
 ['2019' '01']
 ['2019' '02']]

示例1

下面举个例子,假设我们有一些人的身高和体重数据,需要按照身高和体重进行排序。假设以下是我们的数据:

data = np.array([[180, 73], [170, 65], [175, 66], [182, 80]])

我们可以按照身高在最高权重的情况下排序,如下所示:

sorted_indices = np.lexsort((data[:,1], data[:,0]))
sorted_data = data[sorted_indices, :]

请注意,我们将体重放在第一维上,因为我们希望排序时首先注意体重。

示例2

假设我们要对三维空间中的点进行排序,排序优先级如下:z轴,y轴,x轴。假设以下是我们的数据:

points = np.array([[1, 2, 3], [2, 3, 1], [1, 2, 2], [2, 2, 1], [2, 1, 1]])

我们可以按照z轴在最高权重的情况下排序,如下所示:

sorted_indices = np.lexsort((points[:,2], points[:,1], points[:,0]))
sorted_points = points[sorted_indices, :]

请注意,我们将z轴放在第一维上,因为我们希望在排序时首先注意z轴。