如果输入为零,我想创建一个如下所示的数组:
[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)
但它不起作用。
有什么方法可以在一行中实现吗?
最佳答案
通常,当您想要在机器学习中获得用于分类的 one-hot 编码时,您有一个索引数组。
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)
关于python - 一种使用 numpy 的热编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38592324/