Непоследовательные результаты работы скользящего окна Pandas в зависимости от длины серииPython

Программы на Python
Anonymous
Непоследовательные результаты работы скользящего окна Pandas в зависимости от длины серии

Сообщение Anonymous »

Я наткнулся на странное поведение оконных функций в pandas. Похоже, что операция скользящей суммы дает разные результаты в зависимости от длины самой серии.
Учитывая 2 серии:

Код: Выделить всё

s1 = pd.Series(np.arange(5), index=range(5)) # s1 = 1, 2, 3, 4
s2 = pd.Series(np.arange(2, 5), index=range(2, 5)) # s2 = 2, 3, 4, 5
Мы применяем скользящую сумму к обоим:

Код: Выделить всё

k = 0.1
r1 = (s1 * k).rolling(2).sum().dropna() # r1 = 1, 3, 5, 7
r2 = (s2 * k).rolling(2).sum().dropna() # r2 = 5, 7

# remove values from r1 which are not in r2
r1 = r1[r2.index] # r1 = 5, 7

# now r1 should be exactly the same as r2, let's check the indices:
all(r1.index == r2.index) # => true
Однако, если мы проверим значения, они не совсем равны:

Код: Выделить всё

r1.iloc[0] == r2.iloc[0] # => false
abs(r1.iloc[0] - r2.iloc[0]) < 0.000000000000001 # => true
abs(r1.iloc[0] - r2.iloc[0]) < 0.0000000000000001 # => false
Я знаю, что операции с плавающей запятой неточны, и не думаю, что наблюдаемое поведение является ошибкой.
Однако я бы хотел Предположим, что к обеим сериям применяются одни и те же детерминированные вычисления в окне(ях), поэтому я ожидаю, что результаты будут абсолютно одинаковыми.
Мне интересно, что именно вызывает такое поведение при реализации оконной операции.

Подробнее здесь: https://stackoverflow.com/questions/790 ... th-of-a-se

Вернуться в «Python»