Что такое обратная функция numums cumsum?

Если у меня есть z = cumsum( [ 0, 1, 2, 6, 9 ] ), который дает мне z = [ 0, 1, 3, 9, 18 ], как я могу вернуться к исходному массиву [ 0, 1, 2, 6, 9 ]?

Ответ 1

z[1:] -= z[:-1].copy()

Короткий и сладкий, без медленных петель Python. Мы рассматриваем все, кроме первого элемента (z[1:]), и все, кроме последнего (z[:-1]), и вычитаем элементно. Копия гарантирует, что мы вычтем исходные значения элементов вместо значений, которые мы вычисляем. (В NumPy 1.13 и выше вы можете пропустить вызов copy.)

Ответ 2

Вы можете использовать np.diff для вычисления элементов 1...N, которые будут иметь значение между любыми двумя элементами. Это противоположно cumsum. Единственное отличие состоит в том, что diff не вернет первый элемент, но первый элемент будет таким же в исходном и cumsum выводах, поэтому мы просто повторно используем это значение.

orig = np.insert(np.diff(z), 0, z[0])

Вместо insert вы также можете использовать np.concatenate

orig = np.concatenate((np.array(z[0]).reshape(1,), np.diff(z)))

Мы могли бы просто скопировать и заменить элементы 1...N

orig = z.copy()
orig[1:] = np.diff(z)

Ответ 3

Мой любимый:

orig = np.r_[z[0], np.diff(z)]

Ответ 4

Если вы хотите сохранить z, вы можете использовать np.ediff1d:

x = np.ediff1d(z, to_begin=z[0])