假设我有一个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.]])
缥缈止盈
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.]])
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]]。
我相信你究竟想拥有什么。
添加回答
举报
0/150
提交
取消