簡體   English   中英

當window = 1時,pandas滾動中可能出現的錯誤

[英]Possible bug in pandas rolling mean when window = 1

為了在我的代碼中使用更通用的表示法,我想將原始時間序列表示為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

這應該被視為一個錯誤還是我錯過了什么?

這些數字非常小,並且在浮點數如何工作引起的數值“噪聲”范圍內。 浮點數不能完全代表所有數字。 因此,在使用浮點數進行計算時,通常會留下較小的“殘差”。 檢查一個小epsilon:

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

差異來自浮點計算。 由於內部表示它們的方式,計算時浮點數並不完全相同。 在這些“舍入錯誤”中,您的數字是相同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM