2016-06-23 7 views
0

Я хотел бы присвоить int массиву. У меня есть;Назначение номера int массиву

label = ['rest', 'rest', 'ball', 'cat', 'rest'] 

И я хочу получить что-то вроде этого, порядок int не важен;

labeled = [1, 1, 2, 3, 1] 

Как я был, я считаю np.unique (ярлык) и сделать ДИКТ:

labelDict = dict(zip(label, np.arange(1,4)) 

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

+0

Какой результат вы ожидаете от данных в вашем примере? – 3kt

+0

Я рекомендую scikit-learns [DictVectorizer] (http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.DictVectorizer.html) – sascha

+0

Используйте аргумент 'return_inverse = True' в вызове' np. уникальный', чтобы получить что-то вроде вашей последовательности с надписью. Он не будет точно таким же (например, он использует индексирование с нулевым индексом, а метки назначаются в отсортированном порядке), но он может быть достаточно близок. –

ответ

0

Вы можете создать словарь отображения, подобное тому, что вы делаете уже:

mapping = {i:idx for idx, i in enumerate(set(label))} 

Затем, используя отображение переназначить метки:

output = [mapping[i] for i in label] 

Там нет необходимости в NumPy, то задача может быть легко выполнена с помощью базы Pyhton.

+0

Спасибо, это работает как прелести. ли обновить этот выход = [отображение [I] +1 для I в метке] , чтобы начать с индексом 1. – Nufa

+0

Вы можете обновить отображение: 'Перечислим (набор (меток), 1)' вместо этого, в в случае повторного использования отображения в сценарии. – Benjamin

+0

owhh, спасибо – Nufa

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