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

如何在MLX中实现masked_fill?使用where时返回NaN而非预期值求助

在MLX中实现类似PyTorch masked_fill功能时解决-inf导致的nan问题

问题出在你传入mx.where的两个值类型不匹配:float('-inf')是float32类型,而0是int类型,MLX在类型转换过程中出现异常,导致mask为False的位置错误生成了nan。

解决方法

统一两个输入数组的数据类型,将整数0替换为浮点数0.0,或者使用形状、类型匹配的数组生成方法:

方案1:直接使用浮点类型的0

import mlx.core as mx

mask = mx.array([[False, False, True, True],
                 [False, False, True, True],
                 [False, False, True, True],
                 [False, False, True, True]], dtype=mx.bool_)

masked_tensor = mx.where(mask, mx.array(float('-inf')), mx.array(0.0))

方案2:用full_like和zeros_like保证类型/形状一致

这种方法更灵活,适合任意形状的mask:

masked_tensor = mx.where(
    mask,
    mx.full_like(mask, float('-inf'), dtype=mx.float32),
    mx.zeros_like(mask, dtype=mx.float32)
)

运行结果

执行后会得到你预期的输出:

array([[0., 0., -inf, -inf],
       [0., 0., -inf, -inf],
       [0., 0., -inf, -inf],
       [0., 0., -inf, -inf]], dtype=float32)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:35:04