如何同时对数字组进行排序

时间:2019-10-30 06:36:25

标签: python numpy sorting numpy-ndarray

您好,我有一个numpy数组,我想根据索引为模3的元素对它进行排序,这样每3个连续的元素组(从一个模块3开始就保持在一起。例如对于数组{{ 1}}我要排列的数字分别是7、4、12,并让两个数字以相同的顺序紧随其后,因此,我想得到的最终是这个数组:[7,3.4,5.6, 4,5.5,1.2, 12,4.4,4.5]我可以使用一些for循环来做到这一点,但是我可以利用其中一个快速的,numpy的内置函数吗?谢谢!

2 个答案:

答案 0 :(得分:3)

这是一个变体:

import numpy as np

a = np.array([7, 3.4, 5.6, 4, 5.5, 1.2, 12, 4.4, 4.5])
a = a.reshape((3, 3))
a = a[a[:, 0].argsort()].flatten()
print(a)  # [  4.    5.5   1.2   7.    3.4   5.6  12.    4.4   4.5]

我将数组恢复为(3, 3)的形状,然后仅对第一列进行排序(如here所述)并再次对其进行展平。

答案 1 :(得分:1)

您将依次使用这些np函数来实现此目的。当然,您可以一次将它们链接在一起。

import numpy as np
a = np.array([7,3.4,5.6, 4,5.5,1.2, 12,4.4,4.5])
a = np.array_split(a, 3)
a.sort(key=lambda x: x[0])
a = np.array(a).flatten()
  

Out:array([4.,5.5,1.2,7.,3.4,5.6,12.,4.4,4.5])