一种使用numpy的热编码

发布于 2021-01-29 18:22:21

如果输入为零,我想制作一个看起来像这样的数组:

[1,0,0,0,0,0,0,0,0,0]

如果输入为5:

[0,0,0,0,0,1,0,0,0,0]

对于以上内容,我写道:

np.put(np.zeros(10),5,1)

但它没有用。

有什么方法可以在一线实现?

关注者
0
被浏览
42
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    通常,当您想在机器学习中使用单编码进行分类时,就会有一组索引。

    import numpy as np
    nb_classes = 6
    targets = np.array([[2, 3, 4, 0]]).reshape(-1)
    one_hot_targets = np.eye(nb_classes)[targets]
    

    one_hot_targets现在

    array([[[ 0.,  0.,  1.,  0.,  0.,  0.],
            [ 0.,  0.,  0.,  1.,  0.,  0.],
            [ 0.,  0.,  0.,  0.,  1.,  0.],
            [ 1.,  0.,  0.,  0.,  0.,  0.]]])
    

    使用.reshape(-1)可以确保您使用正确的标签格式(也可能使用[[2], [3], [4], [0]])。该-1值是一个特殊值,表示“将所有剩余的物料放入此维”。因为只有一个,所以它使阵列变平。

    复制粘贴解决方案

    def get_one_hot(targets, nb_classes):
        res = np.eye(nb_classes)[np.array(targets).reshape(-1)]
        return res.reshape(list(targets.shape)+[nb_classes])
    

    您可以使用mpu.ml.indices2one_hot。经过测试且易于使用:

    import mpu.ml
    one_hot = mpu.ml.indices2one_hot([1, 3, 0], nb_classes=5)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看