2017-01-09 2 views
0

From the docsможно ли вывести массив argsort из уникальной функции numpy?

Возвращает отсортированные уникальные элементы массива. В дополнение к уникальным элементам есть три дополнительных вывода: индексы входного массива, которые дают уникальные значения, индексы уникального массива, которые восстанавливают входной массив, и количество раз, когда каждое уникальное значение появляется во входном массиве ,

Следовательно, numpy.unique должен выполнять алгоритм сортировки. Есть ли способ вывести сортировку с выходов numpy.unique. Спрашивается по-другому, можем ли мы получить те же результаты argsort исключительно с вывода numpy.unique, поэтому мне не нужно сортировать дважды.


Рассмотрим массивы a и b как данные выборки.

import numpy as np 
from string import ascii_letters 

np.random.seed([3,1415]) 
n = 10000 
a = np.random.randint(100, size=n) 
b = np.random.choice(list(ascii_letters), n) 
+0

Вы бы имели дело с целыми числами? Есть ли повторяющиеся числа в массиве? – Divakar

+0

Я думаю об общем решении, которое дается только на выходе из 'unique'. Я отправлю образцы данных за минуту. – piRSquared

+0

@ Divakar обновленный комментарий – piRSquared

ответ

0

Я только что написал моя собственная уникальная функция

def unique(a): 
    s = a.argsort() 
    a_ = a[s] 
    return a_[np.append(True, (a_[1:] != a_[:-1]))], s 

времени
@hpaulj правильно. Обратите внимание, что мой пользовательский unique работает так же быстро, как np.unique, когда np.unique просят вернуть массив inverse. В противном случае, когда он просто возвращает значения unique, это немного быстрее.

enter image description here

Смежные вопросы