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电话.)
您可以使用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)
| 归档时间: |
|
| 查看次数: |
3172 次 |
| 最近记录: |