我有一个简单的二维数组,我想按第二列中的条目进行排序,如果第二列中存在相同的条目,则还要按第一列进行排序并返回此新数组的索引来自原始数组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 ]])
以及此新数组的相应索引。
答案 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 ]])