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

如何借助布尔mask与非零值数组快速初始化新numpy数组?

问题描述

我有一个包含非零值的一维numpy数组valid_data,还有一个一维布尔数组mask,二者尺寸不同。mask标记了valid_data中的值在待创建新数组中的目标位置。已知mask中True的数量和valid_data的元素数量一致,有没有便捷的方法初始化新数组,不用逐个赋值?

示例代码(尝试用np.where但因形状不匹配报错):

>>> mask = np.array([False, True, False, False, False, True, True, False, False, False])
>>> valid_data = np.array([1, 3, 3])
>>> 
>>> wanted_result = np.array([0, 1, 0, 0, 0, 3, 3, 0, 0, 0])
>>> 
>>> my_try = np.where(mask, valid_data, 0)  # 执行报错:形状不匹配
解决方案

直接利用numpy的布尔索引赋值即可,步骤简洁高效:

  • 先创建一个和mask形状一致的全0数组,类型和valid_data保持一致
  • 通过mask布尔索引,将valid_data的值批量赋值到目标位置

代码实现:

import numpy as np

mask = np.array([False, True, False, False, False, True, True, False, False, False])
valid_data = np.array([1, 3, 3])

# 初始化全0数组,匹配mask的形状和valid_data的数据类型
result = np.zeros_like(mask, dtype=valid_data.dtype)
# 批量赋值
result[mask] = valid_data

print(result)
# 输出:[0 1 0 0 0 3 3 0 0 0]

这种方法完全不需要逐个赋值,numpy会自动处理valid_data与mask中True位置的对应关系,因为已知二者数量匹配,所以不会出现维度不兼容的问题,执行效率也远高于循环赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:22:36