我的问题:我有一个分类变量列表,例如
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 :(得分:6)
首先,您可以使用np.unique
以及其他输入参数unique IDs
-
return_inverse
c = np.unique(a,return_inverse=1)[1]
然后,使用modulus(..,2)
在0
和1
之间切换 -
out = np.mod(c, 2) # Or c%2
答案 1 :(得分: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]