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

如何创建与含多数组列表同形状的0-1数组并指定元素置0

问题解决:创建与数组列表同形状的0-1掩码数组

原代码失效的核心原因是**y是Python列表而非numpy数组**:执行y == -100.时,是将列表中的每个子数组整体与标量-100做比较,得到的是[False, False, False]这样的布尔列表,无法定位到具体元素,因此赋值操作x[y == -100.] = 0根本不会修改任何元素。

正确实现方法(保持numpy数组结构)

由于所有子数组尺寸一致,先将列表转换为三维numpy数组,再进行元素级的比较和赋值:

import numpy as np

y = ([np.array([[1., 0., 0.],
        [0., 0., 1.],
        [0., 0., 1.]], dtype='float32'),
   np.array([[0., 0., 1.],
        [0., 0., 1.],
        [1., 0., 0.]], dtype='float32'),
   np.array([[   0.,    0.,    1.],
        [   1.,    0.,    0.],
        [-100., -100., -100.]], dtype='float32')])

# 将列表转换为三维numpy数组
y_np = np.array(y)
# 创建同形状的全1数组
x = np.ones_like(y_np)
# 将等于-100的位置设为0
x[y_np == -100.] = 0

print(x)

输出结果

array([[[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]],

       [[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]],

       [[1., 1., 1.],
        [1., 1., 1.],
        [0., 0., 0.]]], dtype=float32)

保持Python列表结构的替代方案

如果需要最终结果保持原列表的结构(而非三维numpy数组),可以遍历每个子数组单独处理:

x = []
for arr in y:
    mask = np.ones_like(arr)
    mask[arr == -100.] = 0
    x.append(mask)

# 查看结果
for sub_arr in x:
    print(sub_arr)

输出的x是包含3个(3,3)数组的列表,其中第三个数组的最后一行全为0,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:47:32