使用`np.差异`但是假设输入以一个额外的z开头

2024-05-15 08:44:53 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一系列事件时间v,我可以使用np.diff(v)创建它们的间隔时间。有没有办法让np.diff假设序列以一个隐式的0.开头,这样它就生成一个与v长度相同的数组?在

手动解决方法是:

def diff_from_zero(v):
    return np.diff(np.hstack(([0.], v)))

有没有办法使用diff或其他函数来获得相同的结果?在


Tags: 方法函数fromreturndefnp时间事件
2条回答

例如:

t = np.array([1.1, 2.0, 4.5, 4.9, 5.2])

我们要计算t中的连续差异,包括从0.到{}中第一个元素的差异。在

这个问题给出了实现这一目标的方法:

^{2}$

也可能是这样:

>>> np.hstack((t[0], np.diff(t)))

但是命名不清楚的函数^{}可以在一个函数调用中完成:

>>> np.ediff1d(t, to_begin=t[0])
array([ 1.1,  0.9,  2.5,  0.4,  0.3])

当然,在结果前面加上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

从2019年起,np.diff具有参数prepend和{},它们可以在微分之前将某个值添加到数组中。See the docs

这将向数组追加第一个值,因此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])

prepend参数可以采用其他值。在

相关问题 更多 >