如何使用numpy向量化操作将1D标签数组转换为独热编码2D数组
Numpy向量化实现标签转独热编码方案
你要实现的功能本质是生成分类任务常用的独热(One-Hot)编码,用Numpy高级索引就可以完全替代循环实现向量化操作,性能远高于Python层面的遍历。
实现代码
import numpy as np # 支持输入Python列表或者Numpy数组格式的labels labels = [1, 5, 3, 9, 4] # 初始化全零数组,维度为(样本数,类别数10) y_train = np.zeros((len(labels), 10), dtype=np.float64) # 高级索引批量赋值 y_train[np.arange(len(labels)), labels] = 1.0
逻辑说明
- 核心利用了Numpy的整数数组索引特性,同时传入行索引数组
np.arange(len(labels))(对应每个样本的行号)和列索引数组labels(对应每个样本需要置1的列号),就能一次性对所有匹配的位置批量赋值,全程没有Python层面的循环,所有运算都在Numpy底层C语言层面执行,数据量越大性能优势越明显,万级以上样本量时性能比for循环高几十到上百倍。 - 输出结果和你原有循环实现的结果完全一致:
array([[0., 1., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.], [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 1.], [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.]])
内容的提问来源于stack exchange,提问作者Hades
相关产品推荐
相关产品推荐

