我的问题类似于:subsampling every nth entry in a numpy array
假设我有一个数组,如下所示:A=1,2,2,3,4,1,2,2,3,4,1,2,2,3,4,1,2,2,3,4……
如何扩展切片,以便以特定的间隔对三个元素进行切片?也就是说,我如何从数组中切分2?我认为基本的切片在这种情况下不起作用。
发布于 2019-04-10 15:05:12
您可以通过单独的索引来实现这一点。
我们想从索引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]发布于 2019-04-10 15:19:30
这里最简单的似乎是:
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()发布于 2019-04-10 15:24:51
这是一个带有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])https://stackoverflow.com/questions/55606525
复制相似问题