numpy cumsum函数的反函数是什么?

sco*_*tle 16 python numpy cumsum

如果我有z = cumsum( [ 0, 1, 2, 6, 9 ] ),这给了我z = [ 0, 1, 3, 9, 18 ],我怎么能回到原来的阵列[ 0, 1, 2, 6, 9 ]

use*_*ica 24

z[1:] -= z[:-1].copy()
Run Code Online (Sandbox Code Playgroud)

简短而甜蜜,没有缓慢的Python循环.除了第一个元素(z[1:])和除了最后一个(z[:-1])之外的所有元素,我们接受视图,并减去元素.该副本确保我们减去原始元素值而不是我们正在计算的值.(在NumPy 1.13及以上,你可以跳过这个copy电话.)


Bla*_*kHC 15

以下也保留第一个元素:

np.diff(z, prepend=0)
Run Code Online (Sandbox Code Playgroud)


Sue*_*ver 7

您可以使用np.diff计算元素1...N来获取任何两个元素之间的差异.这与之相反cumsum.唯一的区别是diff不会返回第一个元素,但第一个元素在原始元素和cumsum输出中是相同的,所以我们只需重新使用该值.

orig = np.insert(np.diff(z), 0, z[0])
Run Code Online (Sandbox Code Playgroud)

而不是insert,你也可以使用np.concatenate

orig = np.concatenate((np.array(z[0]).reshape(1,), np.diff(z)))
Run Code Online (Sandbox Code Playgroud)

我们也可以只复制和替换元素 1...N

orig = z.copy()
orig[1:] = np.diff(z)
Run Code Online (Sandbox Code Playgroud)


kup*_*n87 5

如果你想保留z,你可以使用np.ediff1d

x = np.ediff1d(z, to_begin=z[0])
Run Code Online (Sandbox Code Playgroud)