索引数组中的两组列

时间:2017-06-27 20:48:16

标签: python indexing

我正在尝试将列从数组中切片并分配给一个新变量,就像这样。

array1 = array[:,[0,1,2,3,15,16,17,18,19,20]]

这样的事情是否有捷径?

我尝试了这个,但它引发了一个错误:

array1 = array[:,[0:3,15:20]]

这可能很简单但我无法在任何地方找到它。

3 个答案:

答案 0 :(得分:4)

使用np.r_

  

将切片对象转换为沿第一轴的连接。

import numpy as np
arr = np.arange(100).reshape(5, 20)
cols = np.r_[:3, 15:20]

print(arr[:, cols])
[[ 0  1  2 15 16 17 18 19]
 [20 21 22 35 36 37 38 39]
 [40 41 42 55 56 57 58 59]
 [60 61 62 75 76 77 78 79]
 [80 81 82 95 96 97 98 99]]

在一天结束时,可能只比你现在的一点点冗长,但对于更复杂的案例可能会派上用场。

答案 1 :(得分:3)

对于大多数这样的简单案例,最好和最直接的方法是使用串联:

array1 = array[0:3] + array[15:20]

对于更复杂的情况,您需要使用自定义切片,例如NumPy的s_,它允许带有间隙的多个切片,以逗号分隔。你可以阅读它here

此外,如果你的切片遵循一个模式(即得到5,跳过10,得到5等),你可以使用itertools.compress,正如用户ncoghlanthis回答中所解释的那样。

答案 2 :(得分:0)

您可以使用list(range(0, 4)) + list(range(15, 20))