考虑下面的代码,它给出了想要的输出:
import numpy as np
import pandas as pd
sumvalues = 2
touchdown = 3
arr = np.array([1, 2, 3, 4, 5, 6, 7])
series = pd.Series(arr)
shifted = pd.Series(np.append(series, np.zeros(touchdown)))
rolled = shifted.rolling(window=sumvalues, min_periods=1).sum().fillna(0).astype(float)[touchdown:]
print(rolled.values)
如您所见,我想将我的值向后移动“着陆”点,然后为每个条目计算前面条目的“总和”的总和。
上面代码的问题是它很慢,例如我们创建一个整个系列对象只是为了执行滚动。是否有任何智能(快速)方法可以实现与上述相同的操作?
尝试使用 numpy roll 函数,但它有点不同,也尝试过 pandas 中的转变,但似乎效率低下。
sliding_window_view
from numpy.lib.stride_tricks import sliding_window_view as swv
sumvalues = 2
touchdown = 3
arr = np.array([1, 2, 3, 4, 5, 6, 7])
swv(np.pad(arr[touchdown-1:], (0, touchdown)), sumvalues).sum(1)
输出:
array([ 7, 9, 11, 13, 7, 0, 0])