为了在我的代码中使用更通用的表示法,我想将原始时间序列表示为1个时段的移动平均值。 非常出乎意料的是,使用pandas pd.rolling_mean函数,两者并不完全相同:
import pandas as pd
import numpy as np
np.random.seed(1)
ts = pd.Series(np.random.rand(1000))
mavg = pd.rolling_mean(ts, 1)
(ts - mavg).describe()
Out[120]:
count 1.000000e+03
mean 6.284973e-16
std 3.877250e-16
min -3.330669e-16
25% 3.330669e-16
50% 5.551115e-16
75% 8.881784e-16
max 1.554312e-15
dtype: float64
any((ts - mavg).dropna()>0)
Out[121]: True
这应该被视为错误还是我错过了什么?
答案 0 :(得分:3)
这些数字非常小,并且在由浮点数如何工作引起的数值“噪音”范围内。浮点数不能完全代表所有数字。因此,在使用浮点数进行计算时,通常会留下较小的“残差”。检查一个小epsilon:
div::before {
content: "\f086";
font-family: "FontAwesome";
}
答案 1 :(得分:0)
差异来自浮点计算。由于内部表示它们的方式,计算时浮点数并不完全相同。在这些"舍入错误"你的号码是一样的。