将分类变量列表转换为(0,1)列表

时间:2016-12-02 12:09:52

标签: python numpy data-conversion

我的问题:我有一个分类变量列表,例如

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。

2 个答案:

答案 0 :(得分:6)

首先,您可以使用np.unique以及其他输入参数unique IDs -

以矢量化方式获取return_inverse
c = np.unique(a,return_inverse=1)[1]

然后,使用modulus(..,2)01之间切换 -

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]