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
構造化配列を使用するとわずかに改善されますが、劇的ではありません。
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
これは、argsort からインデックス配列を作成し、それを使用して個々の配列を並べ替えた方が潜在的に高速であることを示しています。非常に大きな配列を扱うことが予想され、データのコピーをできるだけ避けたい場合を除いて、これで問題ありません。私が見逃しているこれを行うためのより効率的な方法はありますか?