2016-03-24 16 views
1

私のコードでより一般的な表記法を使用するために、元の時系列を1期間の移動平均として表現したいと思います。 は全く予想外、パンダにpd.rolling_mean機能を使用して、二人はまったく同じではありません。window = 1のときのパンダローリングのバグの可能性

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 

これはバグで考慮すべきか、私は何かが足りないのですか?

答えて

3

数値は非常に小さく、浮動小数点の働きによって発生する数値的な「ノイズ」の範囲内にあります。浮動小数点数はすべての数値を正確に表すことはできません。したがって、浮動小数点数を使って計算するときには、小さな「残差」が残ることがよくあります。小さなイプシロンを確認してください:

>>> any((ts - mavg).dropna().abs() > 1e-14) 
False 
0

浮動小数点計算の違いが原因です。浮動小数点数は、内部でどのように表現されるかによって計算を行うときとまったく同じではありません。これらの「丸め誤差」内では、数字は同じです。

関連する問題