2015-09-06 31 views
2

我有值的記錄陣列諸如這些:numpy的洗牌行然後排序由一個列只

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

+0

當您顯示像這樣的結構化數組時,請包括'dtype'信息。 – hpaulj

回答

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')]) 
+0

美麗,它的作品! – Nir