如何在第n列中对NumPy中的数组进行排序?
例如,
a = array([[9, 2, 3],
[4, 5, 6],
[7, 0, 5]])
Run Code Online (Sandbox Code Playgroud)
我想按第二列对行进行排序,以便我回来:
array([[7, 0, 5],
[9, 2, 3],
[4, 5, 6]])
Run Code Online (Sandbox Code Playgroud) 看起来像单个列对numpy结构化和记录数组进行排序比在类似的独立数组上进行排序要慢得多:
In [111]: a = np.random.rand(1e4)
In [112]: b = np.random.rand(1e4)
In [113]: rec = np.rec.fromarrays([a,b])
In [114]: timeit rec.argsort(order='f0')
100 loops, best of 3: 18.8 ms per loop
In [115]: timeit a.argsort()
1000 loops, best of 3: 891 µs per loop
Run Code Online (Sandbox Code Playgroud)
使用结构化数组有一个微小的改进,但它不是戏剧性的:
In [120]: struct = np.empty(len(a),dtype=[('a','f8'),('b','f8')])
In [121]: struct['a'] = a
In [122]: struct['b'] = b
In [124]: timeit struct.argsort(order='a')
100 loops, best of 3: 15.8 ms per loop
Run Code Online (Sandbox Code Playgroud)
这表明从argsort创建索引数组然后使用它来重新排序各个数组可能会更快.这是可以的,除了我希望处理非常大的数组,并希望尽可能避免复制数据.有没有一种更有效的方法来做到这一点,我错过了?