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

如何使用Numpy函数替代循环将索引列表转为数组指定位置的1?

Numpy 高效设置每行指定列为1的方法

当然有更简洁的向量化实现方式,完全不需要循环——Numpy的向量化操作在性能上远优于循环,尤其是数据量较大时。以下是几种常用的实现方法:

方法一:直接索引赋值(最简洁高效)

利用Numpy的数组索引特性,通过行索引数组与列索引数组配对,批量完成赋值:

import numpy as np

N=5; D=3
ones_index = [0,2,1,0,1]
array = np.zeros(shape=(N,D))
# 用arange生成行索引,和ones_index的列索引一一对应定位赋值
array[np.arange(N), ones_index] = 1

原理:np.arange(N)生成[0,1,2,3,4]的行索引数组,与ones_index的列索引数组精准配对,一次性定位所有需要设为1的位置并完成赋值。

方法二:使用np.put_along函数

如果需要明确指定轴方向进行操作,可以用np.put_along:

import numpy as np

N=5; D=3
ones_index = [0,2,1,0,1]
array = np.zeros(shape=(N,D))
# 将列索引转为二维数组,匹配axis=1的操作维度要求
np.put_along(array, np.array(ones_index)[:, np.newaxis], 1, axis=1)

原理:np.put_along会沿着指定轴(此处为列方向axis=1),将目标位置的值替换为指定值,需把一维的ones_index转为二维数组以匹配原数组的维度结构。

方法三:直接生成目标数组(无需初始化零数组)

若ones_index中的元素都是有效的列索引(范围在0到D-1之间),可以直接利用单位矩阵生成结果:

import numpy as np

N=5; D=3
ones_index = [0,2,1,0,1]
array = np.eye(D)[ones_index]

原理:np.eye(D)生成一个D×D的单位矩阵,每行仅对应列位置为1;用ones_index作为行索引取出对应行,直接得到符合要求的N×D数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:42:28