sortowanie numerycznych struktur i tablic rekordów jest bardzo powolne

wygląda na to, że sortowanie numerycznych struktur i tablic rejestracyjnych przez pojedynczą kolumnę jest znacznie wolniejsze niż sortowanie na podobnej autonomicznej tablicy:

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

Istnieje niewielka poprawa przy użyciu tablicy strukturalnej, ale nie jest to dramatyczna:

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

Oznacza to, że potencjalnie szybciej można utworzyć tablicę indeksu z argsort, a następnie użyć jej do zmiany kolejności poszczególnych tablic. Jest to w porządku, poza tym, że oczekuję, że będę miał do czynienia z bardzo dużymi tablicami i chciałbym uniknąć kopiowania danych w jak największym stopniu. Czy istnieje bardziej skuteczny sposób na to, że tęsknię?

questionAnswers(2)

yourAnswerToTheQuestion