Numpy 随机排列行,然后仅按一列排序

Numpy shuffle rows then sort by one column only

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

[(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'].

您可以在第一列使用 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')])