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

时间:2016-07-29 20:23:38

标签: python numpy cumsum

如果我有z = cumsum( [ 0, 1, 2, 6, 9 ] ),这会给我z = [ 0, 1, 3, 9, 18 ],我怎样才能回到原来的数组[ 0, 1, 2, 6, 9 ]

4 个答案:

答案 0 :(得分:20)

BluetoothGatt.STATE_DISCONNECTED

简短而甜蜜,没有缓慢的Python循环。除了第一个元素(z[1:] -= z[:-1].copy() )和除最后一个元素(z[1:]之外的所有元素)之外,我们都会查看除了元素之外的所有元素。副本确保我们减去原始元素值而不是我们计算的值。 (On NumPy 1.13 and up,您可以跳过z[:-1]来电。)

答案 1 :(得分:7)

您可以使用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)

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

我的最爱:

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