您好,我有一个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的内置函数吗?谢谢!
答案 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])