Numpy shuffle行然后仅按一列排序

时间:2015-09-06 16:41:43

标签: python arrays sorting numpy shuffle

我有一个记录数组,其值如下:

[(1, 3.0)
 (1, 5.0)
 (2, 4.0)
 (2, 7.0)
 (3, 9.0)
 (3, 3.0)]

我需要对行进行随机排序并按第一列对数组进行排序。期望的输出是:

[(1, 5.0)
 (1, 3.0)
 (2, 7.0)
 (2, 4.0)
 (3, 9.0)
 (3, 3.0)]

我试图首先使用numpy.random.shuffle(someArray)进行随机播放,该[(3, 3.0) (1, 5.0) (2, 7.0) (1, 3.0) (2, 4.0) (3, 9.0)] 按预期工作,结果如下:

someArray = numpy.sort(someArray, order=['firstColumn'])

但是当我使用order=['firstColumn', 'secondColumn']排序时,结果是第一个数组,也按第一列和第二列排序。就像我使用Destroy(mManager);

1 个答案:

答案 0 :(得分:2)

您可以在第1列上使用np.argsort,并指定mergesort作为排序类型。然后使用返回的索引对原始数组进行排序:

>>> a
array([(3, 3.0), (1, 5.0), (2, 7.0), (1, 3.0), (2, 4.0), (3, 9.0)], 
      dtype=[('1st', '<i8'), ('2nd', '<f8')])
>>> i = np.argsort(a['1st'], kind='mergesort')
>>> a[i]
array([(1, 5.0), (1, 3.0), (2, 7.0), (2, 4.0), (3, 3.0), (3, 9.0)], 
      dtype=[('1st', '<i8'), ('2nd', '<f8')])