如何从numpy数组高效访问多个切片

时间:2017-07-17 19:59:05

标签: python arrays numpy

目前我正在访问多个切片,如下所示:

首先,我分配一个将多次重新分配的数组

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数组。

1 个答案:

答案 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