Непоследовательные результаты работы скользящего окна 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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