Так почему же ваше декодирование не работает, давайте посмотрим на математику
Предположим, у нас есть последовательность N
чисел X1,X2,...,XN
Переменная delta содержит следующее информация
delta= delta(1), delta(2),delta(3), ...,delta(N)
delta= X1 , X2-X1 , X3-X2 , ..., XN - X(N-1)
Итак, что вы сейчас делаете, это всегда добавляете две записи, которые приведут к следующему:
delta(1)+delta(2), delta(2)+delta(3), delta(3)+delta(4)
X1+X2-X1, X2-X1+X3-X2, X3-X2+X4-X3,...
Суммируя это:
X2, X3-X1, X4-X2
Таким образом, вы видите, что это не то, что вы хотите, для восстановления / декодирования реальных значений вам нужно накопление всей предыдущей информации. Вот почему вы должны добавить все
Это означает:
X2= X1 + delta(2)=X1+X2-X1=X2
X3= X1 + delta(2)+delta(3)=X2+delta(3)=X2+X3-X2=X3
X4= X1 + delta(2)+delta(3)+delta(4)=X2+delta(3)+delta(4)=X3 +delta(4)=X3+X4-X3=X4
and so on ...
Как уже упоминалось в комментариях, вы можете достичь этого без for-l oop, используя cumsum(delta)