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