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

如何在Numpy中无需循环将mask数组的单个1替换为target向量

Numpy无循环实现mask指定位置填充target向量

方案1:支持重叠场景(符合需求,后填充覆盖前填充)

无需显式for循环,完美适配你给出的重叠场景逻辑,实现代码如下:

import numpy as np

L = len(target)
# 提取mask中所有值为1的索引
ones_idx = np.where(mask == 1)[0]
# 广播生成所有需要赋值的位置索引
fill_pos = ones_idx[:, np.newaxis] + np.arange(L)
# 生成对应位置的取值
fill_val = np.tile(target, (len(ones_idx), 1))
# 初始化输出数组
output = np.zeros_like(mask)
# 批量赋值,重复索引位置后赋值的会自动覆盖先赋值的
output[fill_pos] = fill_val

方案2:无重叠场景高效实现

如果可以保证mask中两个1的间隔大于等于target长度(无重叠),可以用卷积实现,内存和速度效率更高:

# target反转后和mask做卷积,取前len(mask)个元素即可
output = np.convolve(mask, target[::-1], mode="full")[:len(mask)]

效果验证

用你给出的重叠场景示例测试:

target = np.array([5, 4, 3, 2, 1])
mask = np.array([0, 0, 1, 0, 0, 0, 1, 0, 0, 0])

# 用方案1执行
L = len(target)
ones_idx = np.where(mask == 1)[0]
fill_pos = ones_idx[:, np.newaxis] + np.arange(L)
fill_val = np.tile(target, (len(ones_idx), 1))
output = np.zeros_like(mask)
output[fill_pos] = fill_val

print(output)
# 输出:[0 0 5 4 3 2 5 4 3 2],和示例完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:24:03