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

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

下面列出如何使用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()函数互换使用。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值