Numpy自己实现独热编码one-hot

    xiaoxiao2022-07-03  108

    有关于独热编码的介绍参考:这里

    下面列出如何使用numpy自己实现独热编码:

    import numpy as np def dense_to_onehot(labels_dense, num_classes=10): num_labels = labels_dense.shape[0] index_offset = np.arange(num_labels) * num_classes labels_onehot = np.zeros((num_labels,num_classes)) # 展平的索引值对应相加,然后得到精确索引并修改labels_onehot中的每一个值 labels_onehot.flat[index_offset + labels_dense.ravel()] = 1 print(labels_onehot) # 模拟需要做独热编码的数据,这是10个类别的数据,从0-9 labels_dense = np.arange(start=0,stop=10,step=1,dtype=np.uint8) print(labels_dense) dense_to_onehot(labels_dense) ''' [0 1 2 3 4 5 6 7 8 9] [[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 1. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]] '''

    在上面的代码里面我们用到了flat和ravel两个函数,关于矩阵压平我们可以有如下方法可以选择:

    numpy中的ravel()、flat()、flatten()、squeeze()、reshape()都有将多维数组转换为一维数组的功能,区别:  ravel():如果没有必要,不会产生源数据的副本,指向同样的数据空间  flatten():返回源数据的副本 ,新的内存空间

    flat:返回一个迭代器对象,通过该对象和索引拿到对应展平为一维的值,并支持修改 squeeze():只能对维数为1的维度降维

    另外,reshape(-1)也可以“拉平”多维数组

    经过上面的区别,所以在上述代码实现中,可以将ravel()和flatten()函数互换使用。

    最新回复(0)