扩展切片numpy数组的步骤

时间:2019-04-10 07:00:11

标签: python numpy

我的问题与此类似:subsampling every nth entry in a numpy array

假设我有一个如下所示的数组: a = [1,2,2,2,3,4,1,2,2,2,3,4,1,2,2,2,3,4 ....]

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

3 个答案:

答案 0 :(得分:3)

您可以通过单个索引进行操作。

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

PickupDateTime  Amount2 DifferenceToPrevious    Amount2_18h Rows_18 Amount2_22h Rows_22
2019-04-02 04:44:19.000 6458    0d 00:13:17:000 13388   3   16854   4
2019-04-02 04:31:02.000 5385    0d 02:34:50:000 6930    2   10396   3
2019-04-02 01:56:12.000 1545    0d 18:06:18:000 1545    1   12516   3
2019-04-01 07:49:54.000 3466    1d 02:23:51:000 3466    1   3466    1
2019-03-31 05:26:03.000 7505    0d 00:13:53:000 13751   3   16742   4
2019-03-31 05:12:10.000 5080    0d 03:28:18:000 6246    2   9237    3
2019-03-31 01:43:52.000 1166    0d 18:02:49:000 1166    1   4157    2
2019-03-30 07:41:03.000 2991    1d 02:39:49:000 2991    1   2991    1
2019-04-01 04:56:21.000 9518    1d 23:52:21:000 9518    1   9518    1
2019-03-30 05:04:00.000 9638    2d 00:34:29:000 9638    1   9638    1
2019-03-28 04:29:31.000 9499    1d 23:28:47:000 9499    1   9499    1
2019-03-26 05:00:44.000 10117   2d 00:03:41:000 10117   1   10117   1
2019-03-24 04:57:03.000 9933    1d 23:50:06:000 9933    1   9933    1
2019-03-22 05:06:57.000 9869    2d 00:25:01:000 9869    1   9869    1

输出:

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 :(得分:3)

这里最简单的似乎是:

 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()

答案 2 :(得分:2)

这里是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])