2016-03-14 243 views
3

我有一个任意维度的Numpy数组和一个包含每个维度的一个数字的索引向量。我希望得到与索引数组中对应于所有维的索引数组中的值相对应的数组的切片,例如,获取一片numpy的ndarray(用于任意维度)

A = np.array([[1, 2, 3, 4], 
       [5, 6, 7, 8], 
       [9,10,11,12]]) 
index = [2,3] 

result = [[1,2,3], 
      [5,6,7]] 

这个直观的语法会是这样的A[:index],但这并不明显的原因工作。

如果阵列的尺寸是固定的,我可以写A[:index[0],:index[1], ... :index[n]];有什么样的列表理解我可以使用,如A[:i for i in index]

回答

3

可以切成多个维度一气呵成:

result = A[:2,:3] 

是切片维度中的一个到索引2和尺寸有两到索引3

如果你有arbitary尺寸,你也可以创建片的一个tuple

slicer = tuple(slice(0, i, 1) for i in index) 
result = A[slicer] 

切片定义了start(0),stop(所述指定索引)和step(1) - 基本上像range,但可用于索引。并且元组的第i个条目将切片数组的第i个维度。

如果只指定stop -indices你可以使用速记:

slicer = tuple(slice(i) for i in index) 

我建议第一个选项,如果你知道的维数,最后一个,如果你不这样做。