扩展切片 numpy 数组的步骤



我的问题与此类似:对 numpy 数组中每 n 个条目进行子采样

假设我有一个数组,如下所示:a = [

1,2,2,2,3,4,1,2,2,2,3,4,1,2,2,2,3,4...]

如何扩展切片,以便以特定的间隔对三个元素进行切片? 即如何从数组中切片 2s?我相信在这种情况下基本切片不起作用。

您可以通过单独索引来执行此操作。

我们想从索引 1 处的元素开始,取 3 个元素,然后跳过 3 个元素:

a = np.array([1, 2, 2, 2, 3, 4, 1, 2, 2, 2, 3, 4, 1, 2, 2, 2, 3, 4])
start = 1
take = 3
skip = 3
indices = np.concatenate([np.arange(i, i + take) for i in range(start, len(a), take + skip)])
print(indices)
print(a[indices])

输出:

[ 1  2  3  7  8  9 13 14 15]
[2 2 2 2 2 2 2 2 2]

这里最简单的似乎是:

 a = np.array([1,2,2,2,3,4,1,2,2,2,3,4,1,2,2,2,3,4])
 a.reshape(-1,6)[1:4].ravel()

或者如果a块不好:

period = 6
a.resize(np.math.ceil(a.size/period),period)
a[:,1:4].ravel()

这是一个带有masking的矢量化 -

def take_sliced_regions(a, start, take, skip):
    r = np.arange(len(a))-start
    return a[r%(take+skip)<take]

示例运行 -

In [90]: a = np.array([1,2,2,2,3,4,1,2,2,2,3,4,1,2,2,2,3,4,1,2])
In [91]: take_sliced_regions(a, start=1, take=3, skip=3)
Out[91]: array([2, 2, 2, 2, 2, 2, 2, 2, 2, 2])

最新更新