如何从python中的ndarray中选择n项并跳过m?

时间:2015-11-19 10:25:13

标签: python numpy multidimensional-array slice

让我们说我有一个包含100个元素的ndarray,我想选择前4个元素,跳过6并继续这样(换句话说,每10个元素选择前4个元素)。

我尝试使用python切片步骤,但我认为它在我的情况下不起作用。我怎样才能做到这一点?我使用熊猫和numpy,他们可以帮忙吗?我四处搜索,但我发现没有像那种切片那样。谢谢!

4 个答案:

答案 0 :(得分:2)

您可以将数组重新整形为10x10,然后使用切片来挑选每行的前4个元素。然后压平重新塑造的切片阵列:

In [46]: print a
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99]

In [47]: print a.reshape((10,-1))[:,:4].flatten()
[ 0  1  2  3 10 11 12 13 20 21 22 23 30 31 32 33 40 41 42 43 50 51 52 53 60
 61 62 63 70 71 72 73 80 81 82 83 90 91 92 93]

答案 1 :(得分:2)

您可以使用NumPy slicing来解决问题。

对于1D数组大小写 -

A.reshape(-1,10)[:,:4].reshape(-1)

这可以扩展到2D数组的情况,选择沿第一轴进行 -

A.reshape(-1,10,A.shape[1])[:,:4].reshape(-1,A.shape[1])

答案 2 :(得分:1)

使用% 10

print [i for i in range(100) if i % 10 in (0, 1, 2, 3)]

[0, 1, 2, 3, 10, 11, 12, 13, 20, 21, 22, 23, 30, 31, 32, 33, 40, 41, 42, 43, 50, 51, 52, 53, 60, 61, 62, 63, 70, 71, 72, 73, 80, 81, 82, 83, 90, 91, 92, 93]

答案 3 :(得分:1)

shorter_arr = arr[np.arange(len(arr))%10 < 4]