给定一系列事件时间v,我可以使用np.diff(v). 有没有办法np.diff假设系列以隐式开头0.,以便它生成一个与 长度相同的数组v?
手动解决方法是:
def diff_from_zero(v):
return np.diff(np.hstack(([0.], v)))
Run Code Online (Sandbox Code Playgroud)
有没有办法使用diff或其他函数来获得相同的结果?
Mat*_*ina 12
截至 2019 年,np.diff有参数prepend并且append可以在微分之前向数组添加某个值。查看文档
这会将第一个值附加到数组中,因此该diff操作将返回一些以 0 开头的 len(t)。
>>> t = np.array([1.1, 2.0, 4.5, 4.9, 5.2])
>>> np.diff(t, prepend=t[0])
array([0. , 0.9, 2.5, 0.4, 0.3])
Run Code Online (Sandbox Code Playgroud)
该prepend参数可以采用其他值。
举个例子:
t = np.array([1.1, 2.0, 4.5, 4.9, 5.2])
Run Code Online (Sandbox Code Playgroud)
我们要计算 中的连续差异t,包括从0.到 中第一个元素的差异t。
这个问题给出了实现这一点的方式:
>>> np.diff(np.hstack((0, t)))
Run Code Online (Sandbox Code Playgroud)
它也可能是这样的:
>>> np.hstack((t[0], np.diff(t)))
Run Code Online (Sandbox Code Playgroud)
但是这个名字晦涩的函数ediff1d可以在一个函数调用中完成:
>>> np.ediff1d(t, to_begin=t[0])
array([ 1.1, 0.9, 2.5, 0.4, 0.3])
Run Code Online (Sandbox Code Playgroud)
当然t[0],预先准备结果与计算差异相同t[0] - 0.。(假设t为非空)。
时间(不是问题的动机,但我很好奇)
import numpy as np
t = np.random.randn(10000)
%timeit np.diff(np.concatenate(([0], t)))
10000 loops, best of 3: 23.1 µs per loop
%timeit np.diff(np.hstack((0, t)))
10000 loops, best of 3: 31.2 µs per loop
%timeit np.ediff1d(t, to_begin=t[0])
10000 loops, best of 3: 92 µs per loop
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6596 次 |
| 最近记录: |