如何同时使用多组逻辑索引为Numpy数组不同位置列赋值
实现方法
你可以通过以下两种常用方式实现多组布尔索引同时赋值:
方法1:遍历配对赋值(写法简洁,几乎无性能损耗)
直接将索引和对应的赋值数组配对遍历,单次循环完成所有赋值操作,代码如下:
import numpy as np # 初始化变量 x = np.empty([2,3]) indx1 = [False,False,True] set1 = np.array([[-1],[-1]]) indx2 = [True,True,False] set2 = np.array([[1,2],[1,2]]) # 一次性完成多组赋值 for idx, val in zip([indx1, indx2], [set1, set2]): x[:, idx] = val
运行后x的输出和你分开两次赋值的结果完全一致:
array([[1., 2., -1.], [1., 2., -1.]])
方法2:完全向量化一次性赋值(无循环,适合多组索引的场景)
先把布尔索引转换为列序号并拼接,同时拼接对应赋值数组,直接一次性写入:
# 提取所有待赋值的列序号 col_indices = np.concatenate([np.where(indx1)[0], np.where(indx2)[0]]) # 拼接对应赋值数组 value_arr = np.concatenate([set1, set2], axis=1) # 一次性完成赋值 x[:, col_indices] = value_arr
内容的提问来源于stack exchange,提问作者rando
相关产品推荐
相关产品推荐

