如何在Numpy中优雅处理含零值的时间序列延迟切片?
解决Numpy序列延迟切片的零值问题
不用分支判断,一行Pythonic代码就能搞定Numpy切片处理延迟时的零值问题:
delayed_arr = my_arr[:-delay or None]
为什么这行代码有效:
- 当
delay = 0时,-delay等于0,Python中0 or None会返回None,切片my_arr[:None]等价于my_arr[:],直接返回原数组。 - 当
delay > 0时,-delay是负数,-delay or None会返回-delay,切片my_arr[:-delay]会去掉最后delay个元素,对应正向延迟的需求。 - 当
delay < 0时,-delay是正数,-delay or None返回该正数,切片my_arr[:正数]会取前abs(delay)个元素,匹配原有代码对负延迟的处理逻辑。
如果你的负延迟需求是取数组的后abs(delay)个元素(比如延迟为负代表向前偏移),可以改用这个写法:
delayed_arr = my_arr[delay or None:]
delay = 0时,delay or None返回None,my_arr[None:]等价于原数组。delay = -2时,delay or None返回-2,my_arr[-2:]取最后2个元素,符合向前偏移的逻辑。
内容的提问来源于stack exchange,提问作者beyarkay
相关产品推荐
相关产品推荐

