在圆形阵列上滚动 window
Rolling window on a circular array
我想将给定的函数(特别是 np.std())应用于一组测量值,
我想将它应用于给定大小的滚动 window。
但是 - 因为测量是在一个圆形阵列中 - 我还需要滚动 window 才能从阵列末端到它的开始重叠。
因此,我无法使用 Rolling window for 1D arrays in Numpy? 中的答案...我尝试修改其方法,但我不是 numpy 专家,我无法理解 np.lib.stride_tricks.as_strided 确实(它的文档在哪里???)
用足够的值填充原始数组以构成 "pseudo-circular" 数组。然后对伪圆数组应用rolling_window
:
import numpy as np
def rolling_window(a, window):
# http://www.mail-archive.com/numpy-discussion@scipy.org/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]]
我想将给定的函数(特别是 np.std())应用于一组测量值, 我想将它应用于给定大小的滚动 window。
但是 - 因为测量是在一个圆形阵列中 - 我还需要滚动 window 才能从阵列末端到它的开始重叠。
因此,我无法使用 Rolling window for 1D arrays in Numpy? 中的答案...我尝试修改其方法,但我不是 numpy 专家,我无法理解 np.lib.stride_tricks.as_strided 确实(它的文档在哪里???)
用足够的值填充原始数组以构成 "pseudo-circular" 数组。然后对伪圆数组应用rolling_window
:
import numpy as np
def rolling_window(a, window):
# http://www.mail-archive.com/numpy-discussion@scipy.org/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]]