如何从phython中给定的整数列表创建多列布尔列表?

时间:2018-05-26 12:33:42

标签: python numpy

我是Python新手。我想做以下。

输入:大小为 n 的整数列表。每个整数的范围为0到3。

输出:多列(在这种情况下为4列,0-3 = 4中的整数范围)numpy列表,大小为 n 。新列表的每一行都将对应于输入列表的整数值的列为True,其余列为False。

E.g。输入列表:[0,3,2,1,1,2],大小= 6,每个整数的范围为0-3

输出列表:

Row 0: True  False  False  False
Row 1: False False  False  True
Row 2: False False  True   False
Row 3: False True   False  False
Row 4: False True   False  False
Row 5: False False  True   False

现在,我可以从4列开始。遍历输入列表并按如下所示创建

output_columns[].
for i in Input list:
    output_column[i] = True
Create an output numpy list with output columns

这是在Python中执行此操作的最佳方法吗?特别是用于创建numpy列表作为输出。

如果是,我如何合并末尾的output_columns []以创建numpy多维列表,每个维度作为output_columns列。

如果没有,那么在Python中执行此操作的最佳(最有效的方法)是什么?

谢谢,

2 个答案:

答案 0 :(得分:3)

  

这是在Python中执行此操作的最佳方法吗?

不,更多的Pythonic,也许最好的方法是使用简单的广播比较如下:

In [196]: a = np.array([0, 3, 2, 1, 1, 2])

In [197]: r = list(range(0, 4))

In [198]: a[:,None] == r
Out[198]: 
array([[ True, False, False, False],
       [False, False, False,  True],
       [False, False,  True, False],
       [False,  True, False, False],
       [False,  True, False, False],
       [False, False,  True, False]])

答案 1 :(得分:2)

您正在创建所谓的单热矢量(矩阵中的每一行都是一个热矢量,意味着只有一个值为True)。

mylist = [0, 3, 2, 1, 1, 2]
one_hot = np.zeros((len(mylist), 4), dtype=np.bool)
for i, v in enumerate(mylist):
    one_hot[i, v] = True

<强>输出

array([[ True, False, False, False],
       [False, False, False,  True],
       [False, False,  True, False],
       [False,  True, False, False],
       [False,  True, False, False],
       [False, False,  True, False]], dtype=bool)