Numpy中0-9数值转10位标记数组的转换名称及原生实现方法
问题解答
转换的官方名称
该操作的标准官方名称是独热编码(One-Hot Encoding,也叫一位有效编码),是特征预处理领域的常规操作,主要用于将离散的类别值转换为固定长度的数值向量,方便后续输入到机器学习模型中使用。
Numpy无循环实现方案
完全可以通过Numpy原生的索引能力实现,不需要手动编写Python层面的循环,以下提供两种常用实现方式:
方式1:高级索引赋值(性能更优,适合大数组)
import numpy as np a = np.array([5, 2, 7]) num_classes = 10 # 初始化全0矩阵 b = np.zeros((a.shape[0], num_classes)) # 批量赋值对应位置为1,底层执行无Python循环 b[np.arange(a.shape[0]), a] = 1
执行后得到的b和你用循环得到的结果完全一致。
方式2:单位矩阵索引(写法更简洁)
import numpy as np a = np.array([5, 2, 7]) num_classes = 10 b = np.eye(num_classes)[a]
该方法利用单位矩阵的特性:np.eye(num_classes)生成的第k行恰好是k对应的独热向量,直接用数组a作为索引取对应行即可得到结果。
内容的提问来源于stack exchange,提问作者Toothery
相关产品推荐
相关产品推荐

