按第二列和第一列对二维数组进行排序

时间:2019-05-02 00:31:59

标签: arrays python-3.x numpy sorting

我有一个简单的二维数组,我想按第二列中的条目进行排序,如果第二列中存在相同的条目,则还要按第一列进行排序并返回此新数组的索引来自原始数组a中。这是起点:

import numpy as np
a = np.array([[0.1,2.134],[0.2,3.02],[0.1,2.5],[0.3,2.134],[0.1,3.02]])
a
>>> array([[0.1  , 2.134],
   [0.2  , 3.02 ],
   [0.1  , 2.5  ],
   [0.3  , 2.134],
   [0.1  , 3.02 ]])

然后我可以按第二列对其进行排序以产生:

b = a[a[:,1].argsort()]
b
>>> array([[0.1  , 2.134],
   [0.3  , 2.134],
   [0.1  , 2.5  ],
   [0.2  , 3.02 ],
   [0.1  , 3.02 ]])

但是我想按第一列的顺序进行排序。从a开始的期望输出是:

>>> array([[0.1  , 2.134],
   [0.3  , 2.134],
   [0.1  , 2.5  ],
   [0.1  , 3.02 ],
   [0.2  , 3.02 ]])

以及此新数组的相应索引。

1 个答案:

答案 0 :(得分:0)

IIUC lexsort

a[np.lexsort((a[:,0], a[:,1]))]
array([[0.1  , 2.134],
       [0.3  , 2.134],
       [0.1  , 2.5  ],
       [0.1  , 3.02 ],
       [0.2  , 3.02 ]])