【问题标题】:turn list of categorical variables into (0,1) list将分类变量列表转换为 (0,1) 列表
【发布时间】:2016-12-02 12:09:51
【问题描述】:

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

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。

【问题讨论】:

  • 你……有转换它们的规则吗……?
  • res = [e if e == 1 else 0 for e in l]

标签: python numpy data-conversion


【解决方案1】:

首先,您可以使用np.unique 和附加输入参数return_inverse 以矢量化方式获取unique IDs -

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

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

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

【讨论】:

  • ISTM 仅在对a 进行排序时才有效,这对于 OP 的示例是正确的。我们知道这通常是真的吗?
  • 太棒了!正是我要找的东西
【解决方案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]

【讨论】:

    猜你喜欢
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 2018-07-03
    • 2017-07-10
    相关资源
    最近更新 更多