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

关于bottleneck.move_mean对同一数组子集两种计算方式结果存在微小差异的疑问

关于bottleneck.move_mean对同一数组子集两种计算方式结果存在微小差异的疑问

最近我碰到一个困惑的问题:按理说用bottleneck.move_mean计算同一组数据的滑动均值,不管是先对完整数组做均值再取对应位置的值,还是先取数组子集再做均值,结果应该完全一致才对,但实际却出现了微小的非零差异。之前我看到过类似的问题,但那个问题描述得不够清晰,所以没人给出回答。

我写了一段测试代码来复现这个问题:

import numpy as np
import bottleneck as bn

howManyIters = 10
smallDifferences = np.zeros([howManyIters])

for whichIter in range(howManyIters):
    testArray = np.random.random_sample([512, 353, 53])
    # 方式1:先取数组子集,再做滑动平均后提取对应位置的值
    val1 = bn.move_mean(testArray[:, :, 46:49], window=3, axis=2)[0, 41, 2]
    # 方式2:先对完整数组做滑动平均,再提取对应位置的值
    val2 = bn.move_mean(testArray, window=3, axis=2)[0, 41, 48]
    smallDifferences[whichIter] = val1 - val2

print(smallDifferences)

运行这段代码后,我得到的结果类似这样:

[ 1.11022302e-16 4.44089210e-16 2.22044605e-16 2.77555756e-16 8.32667268e-17 -3.33066907e-16 1.11022302e-16 -5.55111512e-17 1.66533454e-16 -1.11022302e-16]

我原本预期这些差值应该全是0.0。按照我的理解,窗口长度为3时,bottleneck的滑动均值是取当前值和前两个值的平均,所以这里的切片索引应该是完全对应的才对,为什么会出现这些微小差异呢?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 08:34:32