填充足够的值,使“伪圆形”数组的原始数组。然后应用rolling_window
伪圆阵:
import numpy as np
def rolling_window(a, window):
# http://www.mail-archive.com/[email protected]/msg29450.html
shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
strides = a.strides + (a.strides[-1],)
return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
def circular_rolling_window(a, window):
pseudocircular = np.pad(a, pad_width=(0, windowsize-1), mode='wrap')
return rolling_window(pseudocircular, windowsize)
a = np.arange(5)
windowsize = 3
print(circular_rolling_window(a, windowsize))
产量
[[0 1 2]
[1 2 3]
[2 3 4]
[3 4 0]
[4 0 1]]
它的工作 - 非常感谢!为了简化,我只是在rolling_window()定义 – alessandro
中插入了一行 = np.pad(a,pad_width =(0,windowsize-1),mode ='wrap')作为第一行。我编辑了我的帖子以使用它。由于Erik Rigtorp的“rolling_window”经常被引用,所以我给出了一个不同的名称。 – unutbu