将分类变量列表转换为 (0,1) 列表
turn list of categorical variables into (0,1) list
我的问题:我有一个分类变量列表,例如
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]
本质上,每"switch",数字必须从1切换到0。
首先,您可以使用 np.unique
和附加输入参数 return_inverse
-
以矢量化方式获取 unique IDs
c = np.unique(a,return_inverse=1)[1]
然后,使用modulus(..,2)
在0
和1
-
之间切换
out = np.mod(c, 2) # Or c%2
也许你正在寻找这样的东西:
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]
我的问题:我有一个分类变量列表,例如
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]
本质上,每"switch",数字必须从1切换到0。
首先,您可以使用 np.unique
和附加输入参数 return_inverse
-
unique IDs
c = np.unique(a,return_inverse=1)[1]
然后,使用modulus(..,2)
在0
和1
-
out = np.mod(c, 2) # Or c%2
也许你正在寻找这样的东西:
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]