Numpy 如何实现1-hot数组?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

假设我有一个一维的Numpy数组

a = [1,0,3]

我想将它编码为一个2d 1-hot数组。

b = [[0,1,0,0], [1,0,0,0], [0,0,0,1]]

有更好的方法吗?

提问于
用户回答回答于

你的数组a定义输出数组中非零元素的列。还需要定义行,然后使用高级索引:

>>> a = np.array([1, 0, 3])
>>> b = np.zeros((3, 4))
>>> b[np.arange(3), a] = 1
>>> b
array([[ 0.,  1.,  0.,  0.],
       [ 1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.]])
>>>

用户回答回答于
>>> values = [1, 0, 3]
>>> n_values = np.max(values) + 1
>>> np.eye(n_values)[values]
array([[ 0.,  1.,  0.,  0.],
       [ 1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.]])

扫码关注云+社区