Один горячий из строк - получение индекса в списке уникальных - PullRequest
0 голосов
/ 11 июня 2018

Есть ли удобный способ извлечения индексов из массива строк? Я собираюсь выполнить простое кодирование в горячем режиме с помощью NumPy.У меня есть способ сделать кодирование само по себе, но сначала мне понадобится список индексов для кодирования.

Получение отсортированных уникальных элементов очень просто.

>>> vals = np.array(['a', 'b', 'c', 'b', 'a'])
>>> uniq = np.unique(vals)
array(['a', 'b', 'c'], dtype='<U1')

Тогда преобразование займетместо.Сначала я подумал об использовании list.index с использованием основных списков Python, но это включает в себя преобразование списка из ndarray в list и обратно.И я думаю, что есть лучшее решение.

Я придумал:

idx = [np.where(uniq == v) for v in vals]

, но это дает массив nd-массивов.

И дляожидаемый результат естественно:

[0, 1, 2, 1, 0]

1 Ответ

0 голосов
/ 11 июня 2018

Набор return_inverse=True:

vals = np.array(['a', 'b', 'c', 'b', 'a'])
u, indices = np.unique(vals, return_inverse=True)

print(u)  # ['a' 'b' 'c']
print(indices)  # [0 1 2 1 0]
...