能否利用另一数组按列给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
相关产品推荐
相关产品推荐

