关于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
相关产品推荐
相关产品推荐

