2016-12-02 2 views
4

моя проблема: у меня есть список категориальных переменных, таких какпревратить список категориальных переменных в (0,1) список

import numpy as np 
a = np.array(['A','A','B','B','C','C','C']) 
unique_vars = {v: k for k, v in enumerate(np.unique(a))} 
c = np.array([unique_vars[i] for i in a]) 

, который дает:

array([0, 0, 1, 1, 2, 2, 2]) 

, и я хочу, чтобы превратиться в :

res = [0,0, 1,1, 0,0,0] 

по существу, на каждом "переключатель", номер должен быть переключен от 1 до 0.

+0

Есть ли у вас ... есть правила для преобразования их ..? – erip

+0

'res = [e if e == 1 else 0 для e in l]' – erip

ответ

6

Во-первых, вы можете получить unique IDs в векторизованного образом с np.unique и дополнительным входным аргументом return_inverse -

c = np.unique(a,return_inverse=1)[1] 

Затем используйте modulus(..,2) сделать переключатели между 0 и 1 -

out = np.mod(c, 2) # Or c%2 
+0

ISTM это будет работать, только если 'a' отсортировано, что верно для примера OP. Знаем ли мы, что это будет правда в целом? – DSM

+0

потрясающий! eaxactly, что я искал – Asher11

0

Возможно, вы ищете что-то вроде этого:

arr = ['A','A','B','B','C','C','C'] 

def get_switched_array(in_array, value): 
    return [ 1 if v == value else 0 for v in in_array ] 

print get_switched_array(arr, 'A') 
print get_switched_array(arr, 'B') 
print get_switched_array(arr, 'C') 

, который выводит:

[1, 1, 0, 0, 0, 0, 0] 
[0, 0, 1, 1, 0, 0, 0] 
[0, 0, 0, 0, 1, 1, 1] 

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

  • Нет связанных вопросов^_^