假设我有一个这样的数组:
array([1, 2, 3, 4, 5, 5, 7, 8, 9, 10])
我想将其更改为
array([1, 2, 3, 4]), array([3, 4, 5, 6]), array([5, 6, 7, 8]), array([7, 8, 9, 10])
这里窗口大小为4
,步幅为2
。
如何在Python函数中实现?
假设我有一个这样的数组:
array([1, 2, 3, 4, 5, 5, 7, 8, 9, 10])
我想将其更改为
array([1, 2, 3, 4]), array([3, 4, 5, 6]), array([5, 6, 7, 8]), array([7, 8, 9, 10])
这里窗口大小为4
,步幅为2
。
如何在Python函数中实现?
你想要使用numpy.lib.stride_tricks.as_strided
def window(a, w = 4, o = 2, copy = False):
sh = (a.size - w + 1, w)
st = a.strides * 2
view = np.lib.stride_tricks.as_strided(a, strides = st, shape = sh)[0::o]
if copy:
return view.copy()
else:
return view
Out[]:
array([[ 1, 2, 3, 4],
[ 3, 4, 5, 6],
[ 5, 6, 7, 8],
[ 7, 8, 9, 10]])
如果您想要写入窗口数组,请确保将copy=True
,否则它将作为内存共享视图。
Expected type 'Optional[Iterable[int]]
, got 'int' insteadfor
strides=st` - user2398046a
是什么? - Daniel Fa
,我传入了一个 DataFrame.values
,而且这个 Data Frame
的形状是 (540, 3)。但是我遇到了错误:ValueError: mismatch in length of strides and shape
。我该如何解决这个问题? - user2398046
as_strided
函数即可。 - Alex Riley