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

能否利用另一数组按列给Numpy array指定行索引赋值?

当然可以!这里有两种简洁的实现方式

完全能按照你想要的逻辑实现这种按列给指定行索引赋值的操作,核心是利用Numpy的整数数组索引特性,直接定位到需要赋值的位置。

方法一:适配二维数组格式的a

首先把你的列表转换成Numpy数组(这是Numpy操作的前提),然后通过行索引和a中的列索引一一对应,批量完成赋值:

import numpy as np

# 初始化x和a为Numpy数组
x = np.zeros((4, 2), dtype=int)
a = np.array([[0], [1], [0], [1]])

# 核心操作:用0到3的数组指定行位置,用a扁平化后的一维数组指定对应列位置
x[np.arange(x.shape[0]), a.flatten()] = 1

print(x)
# 输出结果完全符合预期:
# [[1 0]
#  [0 1]
#  [1 0]
#  [0 1]]

方法二:用一维数组的a更简洁

如果初始化a的时候直接用一维数组,连flatten()步骤都可以省略,代码会更清爽:

import numpy as np

x = np.zeros((4, 2), dtype=int)
a = np.array([0, 1, 0, 1])  # 直接定义为一维数组

x[np.arange(x.shape[0]), a] = 1

print(x)
# 同样得到你想要的结果

原理说明

Numpy的整数数组索引允许你传入两个长度相同的数组:第一个数组指定所有要修改的行位置,第二个数组指定对应行的列位置。每一组(行[i], 列[i])都会被精准定位,然后统一赋值为1,完美匹配你描述的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:52:00