Python - 滚动内减法 window

Python - subtraction inside rolling window

I need to make subtractions inside red frames as [20-10,60-40,100-70] that results in [10,20,30]

Current code makes subtractions but I don't know how to define red frames

seq = [10, 20, 40, 60, 70, 100]
window_size = 2
for i in range(len(seq) - window_size+1):
    x=seq[i: i + window_size]
    y=x[1]-x[0]
    print(y)

这是一个使用 numpy 的解决方案,如果您必须在短时间内处理大量数据,它可能会很有用。我们 select 值基于它们的索引是偶数 (index % 2 == 0) 还是奇数 (index % 2 != 0)。

import numpy as np

seq = [10, 20, 40, 60, 70, 100]
seq = np.array(seq)

index = np.arange(len(seq))
seq[index % 2 != 0] - seq[index % 2 == 0]

您可以利用 seq[0::2] 将从零开始为您提供 seq 的所有其他元素这一事实来构建快速解决方案。所以你可以计算 seq[1::2] - seq[0::2] 来得到这个结果。

不使用任何包你可以做:

seq = [10, 20, 40, 60, 70, 100]
sub_seq = [0]*(len(seq)//2)
for i in range(len(sub_seq)):
    sub_seq[i] = seq[1::2][i] - seq[0::2][i]

print(sub_seq)

相反,您可以使用 Numpy。使用 numpy 数组对象,您可以减去数组而不是显式循环:

import numpy as np
seq = np.array([10, 20, 40, 60, 70, 100])
sub_seq = seq[1::2] - seq[0::2]

print(sub_seq)