numpy cumsum 函数的反函数是什么?
What is the inverse of the numpy cumsum function?
如果我有 z = cumsum( [ 0, 1, 2, 6, 9 ] )
,这给了我 z = [ 0, 1, 3, 9, 18 ]
,我怎样才能回到原来的数组 [ 0, 1, 2, 6, 9 ]
?
z[1:] -= z[:-1].copy()
简短而甜美,没有缓慢的 Python 循环。我们查看除第一个元素 (z[1:]
) 和除最后一个 (z[:-1]
) 之外的所有元素,然后按元素相减。该副本确保我们减去原始元素值而不是我们正在计算的值。 (On NumPy 1.13 and up,您可以跳过 copy
调用。)
您可以使用 np.diff
来计算元素 1...N
,这将取任意两个元素之间的差值。这与cumsum
相反。唯一的区别是 diff
不会 return 第一个元素,但第一个元素在原始和 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)
我最喜欢的:
orig = np.r_[z[0], np.diff(z)]
如果要保留z
,可以使用np.ediff1d
:
x = np.ediff1d(z, to_begin=z[0])
下面也保留第一个元素:
np.diff(z, prepend=0)
如果我有 z = cumsum( [ 0, 1, 2, 6, 9 ] )
,这给了我 z = [ 0, 1, 3, 9, 18 ]
,我怎样才能回到原来的数组 [ 0, 1, 2, 6, 9 ]
?
z[1:] -= z[:-1].copy()
简短而甜美,没有缓慢的 Python 循环。我们查看除第一个元素 (z[1:]
) 和除最后一个 (z[:-1]
) 之外的所有元素,然后按元素相减。该副本确保我们减去原始元素值而不是我们正在计算的值。 (On NumPy 1.13 and up,您可以跳过 copy
调用。)
您可以使用 np.diff
来计算元素 1...N
,这将取任意两个元素之间的差值。这与cumsum
相反。唯一的区别是 diff
不会 return 第一个元素,但第一个元素在原始和 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)
我最喜欢的:
orig = np.r_[z[0], np.diff(z)]
如果要保留z
,可以使用np.ediff1d
:
x = np.ediff1d(z, to_begin=z[0])
下面也保留第一个元素:
np.diff(z, prepend=0)