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

假设我有一个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。


holdtom
浏览 729回答 3
3回答

泛舟湖上清波郎朗

您的数组a定义输出数组中非零元素的列。您还需要定义行,然后使用花式索引:>>> a = np.array([1, 0, 3])>>> b = np.zeros((3, 4))>>> b[np.arange(3), a] = 1>>> barray([[ 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.]])

qq_遁去的一_1

这是我觉得有用的东西: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]]。我相信你究竟想拥有什么。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python