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

Python中如何通过1D NumPy数组索引生成指定位置为1的2D NumPy数组

实现方案

你需要的功能属于独热编码转换,NumPy原生支持两种高效实现,均不需要手动循环,性能远高于Python层的手写逻辑,适合高频迭代和大数组场景。

两种推荐实现方式

方式1:np.eye索引法(代码最简洁)

利用单位矩阵的行天然就是对应索引的独热向量的特性,直接用输入数组作为行索引提取结果:

import numpy as np

# 你的输入参数
input_arr = np.array([1, 2, 5, 1, 2])
num_classes = 6  # 预定义的2D数组宽度

# 核心转换代码
result = np.eye(num_classes, dtype=np.int32)[input_arr]

该方式单句即可完成转换,适合num_classes数值不大的场景。

方式2:高级索引赋值法(内存效率更高)

如果预定义的宽度非常大,生成完整单位矩阵会占用额外内存,可采用先初始化零数组再批量赋值的方式:

import numpy as np

input_arr = np.array([1, 2, 5, 1, 2])
num_classes = 6

result = np.zeros((len(input_arr), num_classes), dtype=np.int32)
result[np.arange(len(input_arr)), input_arr] = 1

该方式内存占用仅和最终输出数组一致,适合num_classes较大的场景。

两种方式的输出均和你给出的示例完全匹配,单批百万级数据的转换耗时都在毫秒级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:27:03