我有一个记录数组,其值如下:
[(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);
。
答案 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')])