我是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中执行此操作的最佳(最有效的方法)是什么?
谢谢,
答案 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)