为了账号安全,请及时绑定邮箱和手机立即绑定

Numpy:非相邻值的差异

Numpy:非相邻值的差异

眼眸繁星 2022-10-18 16:00:16
我想获取一维 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 值“强制”它使用最后一个“好”值,但不起作用。有没有一种简单的方法可以做到这一点?
查看完整描述

1 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

使用索引列表。我假设您想保持第一个值不变。


对于零间隔:


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代替。


查看完整回答
反对 回复 2022-10-18
  • 1 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号