如果我有z = cumsum( [ 0, 1, 2, 6, 9 ] )
,这会给我z = [ 0, 1, 3, 9, 18 ]
,我怎样才能回到原来的数组[ 0, 1, 2, 6, 9 ]
?
答案 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)]