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

xarray滚动窗口检测无NaN区域时结果仅含NaN和1的原因咨询

xarray滚动窗口检测无NaN区域时结果仅含NaN和1的原因咨询

嗨,我来帮你拆解一下这个问题~

你遇到的核心问题是xarray的rolling.reduce方法默认的skipna=True参数在暗中起作用!

当skipna=True时,xarray会自动检查每个滚动窗口里是否包含NaN——不管是原始数据里生成的NaN,还是边界窗口超出数组范围被填充的NaN——只要窗口里存在NaN,它就会直接把该位置的结果设为NaN,完全忽略你自定义lambda函数的计算结果。这就是为什么你看到内部出现NaN,而不是预期的0:那些位置的窗口里确实有原始数据的NaN,但xarray跳过了你的函数处理,直接返回了NaN。

至于你看到的1,是那些窗口里完全没有NaN的位置,xarray没触发skipna的干预逻辑,所以保留了你函数返回的True(转换成float就是1)。而边界的NaN则是因为窗口超出数组范围被填充了NaN,xarray同样按照skipna=True的逻辑返回了NaN。

要得到你预期的结果(边界NaN、窗口无NaN返回1、窗口有NaN返回0),只需要在reduce方法里加上skipna=False参数,让xarray别干预你的自定义逻辑:

result = arr.rolling(center=True, x=3, y=3)\
    .reduce(lambda x, axis: np.all(~np.isnan(x), axis=axis), skipna=False)

这样运行后,内部那些原本是NaN的位置就会变成0啦~

备注:内容来源于stack exchange,提问作者ganzk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:59:31