You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NumPy如何将标签数组映射为对应索引为1的二进制数组

NumPy高效实现标签转对应位置1的二进制数组

你要实现的本质是0-9取值标签的独热编码转换,用NumPy的向量化操作可以完全避开Python层循环,性能远高于迭代写法,下面是两种可直接用的实现:

方法1:零数组索引赋值(性能最优,推荐大数据量场景用)

先初始化和目标形状一致的全0数组,再通过NumPy高级索引直接把对应位置设为1,没有多余内存开销:

import numpy as np

labels = [1, 4, 9]
labels = np.asarray(labels, dtype=int)
# 初始化形状为(样本数, 10)的全0数组,0-9共10个取值位
binary = np.zeros((labels.size, 10), dtype=int)
# 逐行对应标签位置赋值为1
binary[np.arange(labels.size), labels] = 1

运行输出和示例完全一致:

[[0 1 0 0 0 0 0 0 0 0]
 [0 0 0 0 1 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 1]]

方法2:单位矩阵索引(写法最简洁)

先生成10阶单位矩阵(第i行仅第i位为1),直接用标签值索引对应行即可,代码更短,性能和方法1差距极小:

binary = np.eye(10, dtype=int)[labels]

注意事项

  • 两种方法都要求标签取值在0-9范围内,传入超出范围的值会触发索引越界错误,用之前可以先加assert (labels >=0).all() and (labels <=9).all()做校验
  • 如果需要对接深度学习框架常用的浮点类型,把dtype=int改成对应类型比如np.float32即可

内容的提问来源于stack exchange,提问作者user2919910

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 03:27:26