目前我正在访问多个切片,如下所示:
首先,我分配一个将多次重新分配的数组
X = np.zeros( (batch_size, window, 5) )
这是将多次运行的赋值循环(batch_indices
每次都有不同的索引,但形状相同):
for i, b in enumerate(batch_indices):
X[i] = Xs[b:b+window]
有更有效的方法吗?我觉得应该有类似的语法:
X = Xs[ [slice(b,b+window) for b in batch_indices] ]
虽然Xs
的形状是2维的,但X的最终形状应该是3维np.array。可以想象如下:Xs
是一个长多维时间序列,X需要是一个包含许多多维时间序列切片的numpy数组。
答案 0 :(得分:2)
方法#1
一种矢量化方法是创建所有滑动窗口索引并将索引编入Xs
,如下所示 -
X = Xs[np.asarray(batch_indices)[:,None] + np.arange(window)]
方法#2
另一种内存有效的方法是使用np.lib.stride_tricks.as_strided
创建sliding-windows
,从而避免像上一种方法那样创建滑动窗口索引,只需使用batch_indices
索引,就像这样 -
X = strided_axis0(Xs,window)[np.asarray(batch_indices)]
基于步幅的功能strided_axis0
来自here
。