为了账号安全,请及时绑定邮箱和手机立即绑定

将索引数组转换为1-hot编码的numpy数组

将索引数组转换为1-hot编码的numpy数组

holdtom 2019-09-20 14:26:38
假设我有一个ndy阵列a = array([1,0,3])我想将其编码为2d 1-hot阵列b = array([[0,1,0,0], [1,0,0,0], [0,0,0,1]])有快速的方法吗?比仅仅循环a设置元素更快b。
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

您的数组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.]])


查看完整回答
反对 回复 2019-09-20
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

>>> 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.]])


查看完整回答
反对 回复 2019-09-20
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

这是我觉得有用的东西:


def one_hot(a, num_classes):

  return np.squeeze(np.eye(num_classes)[a.reshape(-1)])

这里num_classes代表你拥有的课程数量。因此,如果你有一个a形状为(10000,)的向量,这个函数将它转换为(10000,C)。注意,它a是零索引的,one_hot(np.array([0, 1]), 2)即将给出[[1, 0], [0, 1]]。


我相信你究竟想拥有什么。


查看完整回答
反对 回复 2019-09-20
  • 3 回答
  • 0 关注
  • 728 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信