Numpy:非相邻值的差异

我想获取一维 numpy 数组中不相邻值的差异。

该数组是沿时间线从 1 到 的一系列值N

对于N=12,数组可能看起来像

timeline = np.array([ 0, np.nan, np.nan, 4, np.nan, 6, np.nan, np.nan, 9, np.nan, 11, 12])

或喜欢

timeline = np.array([ 0,  0,  0,  4,  0,  6,  0,  0,  9,  0, 11, 12])

所需的结果应如下所示:(数组的大小是完整的,位置很重要)

diff = np.array([ 0,  0,  0,  4,  0,  2,  0,  0,  3,  0, 2, 1])

np.diff返回相邻值的差异,并利用 NaN 值“强制”它使用最后一个“好”值,但不起作用。

有没有一种简单的方法可以做到这一点?



眼眸繁星
浏览 129回答 1
1回答

四季花海

使用索引列表。我假设您想保持第一个值不变。对于零间隔:imask = np.flatnonzero(timeline)diff = np.zeros_like(timeline)diff[imask[0]] = timeline[imask[0]]diff[imask[1:]] = timeline[imask[1:]] - timeline[imask[:-1]]或者更优雅地,将最后两行替换为:diff[imask] = np.diff(timeline[imask], prepend=0)对于nans 只需将第一行替换为imask = np.flatnonzero(~np.isnan(timeline))如果您可以访问用于进行选择的原始蒙版,那就更好了。使用它作为参数来flatnonzero代替。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python